【问题标题】:How to deselect the text of a combobox如何取消选择组合框的文本
【发布时间】:2011-12-16 12:38:24
【问题描述】:

我有一个氪组合框,我用一个键值对列表进行数据绑定。发生的事情是,当我在代码中设置所选项目时,它会突出显示文本。如何防止这种情况或取消选择文本?

我尝试了以下方法:

// 1
combo.Select(0,0);
// 2
combo.Focus();
anotherControl.Focus();
// 3
combo.SelectionStart = 0;
combo.SelectionLength = combo.Text.Length;
// 4 
combo.SelectionStart = combo.Text.Length;
combo.SelectionLength = 0;

似乎没有任何效果。任何帮助表示赞赏。

【问题讨论】:

    标签: c# .net winforms combobox krypton-toolkit


    【解决方案1】:

    我设法通过覆盖我的控件/窗口的 OnPaint 事件并执行此操作

    combobox1.SelectionLength = 0;
    

    【讨论】:

    • 执行此操作后,我无法突出显示文本。每次都会取消选择它,因为 OnPaint 方法经常被调用
    【解决方案2】:

    我可能找到了可行的解决方案:

    如果您正在使用表单,请订阅表单的 Shown 事件。

    如果您使用的是 UserControl(就像我一样),您可以订阅 VisibleChanged 事件。

    在这种情况下,您可以执行以下操作:

            foreach (ComboBox cbo in (this.Controls.Cast<Control>().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
            {
                cbo.SelectionLength = 0;
            }
    

    顺便说一句:

    我最终不得不为用户控件执行此操作,其中我将 ComboBoxes 添加到控件中,然后需要稍后动态设置它们的大小。设置大小会导致 OP 遇到的突出显示。

    【讨论】:

      【解决方案3】:

      您只需将此代码放置在生成的事件或按钮单击要取消选择组合框文本的位置

      ComboBox1.SelectedItem = null;
      

      【讨论】:

      • OP 没有尝试更改所选项目,他只是想取消突出显示文本。
      【解决方案4】:

      试试这个

      combo.SelectedText = String.Empty;
      

      关于您的焦点问题:(MSDN)

      当组合框失去焦点时,选择点移动到 文本的开头,任何选定的文本都将变为未选中

      好奇怪;为什么以下不起作用:

      anotherControl.Focus(); 
      

      【讨论】:

      • 当我在加载后点击它然后点击别的东西然后那个焦点东西起作用了!??!这让我发疯了
      • 您的组合框是否绑定到某个数据源?如果是,请尝试 SelectedIndex = -1
      • 它已绑定,但我随后从列表中选择了一个项目。它基本上是一个从数据库预填充的表单,所以我需要选择正确的项目。
      【解决方案5】:

      我知道,古老的帖子,古老的技术,但这个丑陋的单线器对我有用:

      cb.SelectedValueChanged += (s, e) => { cb.BeginInvoke((MethodInvoker)delegate { cb.SelectionStart = cb.Text.Length; }); };
      

      【讨论】:

        【解决方案6】:

        我知道你问这个问题已经有一段时间了。但这是你可以做的

        combo.selectedindex = -1;
        

        【讨论】:

        • 谢谢,但我不想更改所选项目,我只是想取消突出显示文本。
        【解决方案7】:

        您没有指定用户是否应该能够编辑 ComboBox 值。如果不是,则 ComboBox 的DropDownStyle 应设置为ComboBoxStyle.DropDownList。这样 ComboBox 将只允许选择现有值,用户将无法键入新值并且文本将永远不会突出显示。

        【讨论】:

          【解决方案8】:

          在 SelectedIndexChanged 事件中添加计时器,该计时器将在 10 毫秒后执行一次。

          new System.Threading.Timer((s) =>
                      {
                          comboBox1.Invoke(new Action(() =>
                          {
                              comboBox1.Select(0, 0);
                          }));
                      }, null, 10, System.Threading.Timeout.Infinite);
          

          【讨论】:

            【解决方案9】:

            不确定您可能在后台执行什么操作,例如触发事件等。但是在组合框 selectedindexchanged 事件中您可以添加另一个Control.Select()。

            应该这样:)

            【讨论】:

              【解决方案10】:

              这是我的工作:

              private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
              {
                   this.ActiveControl = cancelButton;
              }
              

              【讨论】:

                【解决方案11】:

                这 3 行帮助了我:

                cbInstallationType.SelectionStart = 0;
                cbInstallationType.SelectionLength = 0;
                cbInstallationType.TabIndex = 99;
                

                TabIndex 必须不是第一个,因此它不是表单中的第一项

                【讨论】:

                • 我遇到了与 OP 相同的问题,但没有帮助
                【解决方案12】:

                在我的情况下,选择出现在调整大小之后。这解决了它:

                textBox.Resize += (sender, args) =>
                {
                    Control c = sender as Control;
                    if (c == null || c.Parent == null)
                        return;
                
                    c.Focus();
                    c.Parent.Focus();
                };
                

                【讨论】:

                  【解决方案13】:

                  订阅“SelectedIndexChanged”事件,该事件的任务是设置 ComboBox 的焦点。

                  private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
                  {
                      comboBox1.Focus();
                  }
                  

                  从主窗体订阅“Paint”事件。取消选择发生在此事件处理程序中:

                  private void MainForm_Paint(object sender, PaintEventArgs e)
                  {
                      comboBox1.SelectionLength = 0;
                  }
                  

                  【讨论】:

                    【解决方案14】:

                    “选择”对我不起作用。但我发现了一个非常简单的技巧。 将此权限添加到 SelectedIndexChanged-Event 中:

                    comboBox1.Hide();
                    comboBox1.Show();
                    

                    为我工作。

                    【讨论】:

                      【解决方案15】:

                      我不在乎这有多大。我们正在建立一个知识库。

                      我使用 D5(可能之前的版本是相同的)。你需要使用:

                      Combobox.SelLength :=  0; 
                      

                      另外,如果这不起作用,这个可以:避免使用默认样式 (csDropDown)。 并将其设置为:

                      Combobox.Style := csDropDownList; 
                      

                      按照亚历克斯的建议。

                      谢谢。效果很好!

                      【讨论】:

                      • 对不起,您在此处显示的语法根本不像 C#。
                      • D5?你是说德尔福吗?在 [C#] 标记的问题中?
                      猜你喜欢
                      • 2012-11-23
                      • 2020-12-16
                      • 1970-01-01
                      • 2014-10-09
                      • 2013-03-28
                      • 1970-01-01
                      • 2012-05-06
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多