如何取消选择combobox的文本

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

我尝试过以下方法:

// 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; 

似乎没什么用。 任何帮助表示赞赏。

我管理完成此操作将覆盖我的控件/窗口的OnPaint事件并执行此操作

 combobox1.SelectionLength = 0; 

我可能找到了一个有效的解决方案:

如果您使用的是表单,请订阅表单的已显示事件。

要么

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

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

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

作为旁白:

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

试试吧

 combo.SelectedText = String.Empty; 

关于焦点问题:( MSDN )

当combobox失去焦点时,选择点将移动到文本的开头,并且任何选定的文本都将被取消选中

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

 anotherControl.Focus(); 

不确定你在后台可能正在做什么,即触发事件等。但是在combox selectedindexchanged事件中你可以添加anotherControl.Select()。

应该:)

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

 combo.selectedindex = -1; 

这是我做的:

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

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

这三行帮了我:

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

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

您只需将此代码放在生成的事件或按钮上,然后单击要取消选择combobox文本的位置

 ComboBox1.SelectedItem = null; 

在我的情况下,resize后出现。 这解决了它:

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

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

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

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

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

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

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

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

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

 Combobox.SelLength := 0; 

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

 Combobox.Style := csDropDownList; 

正如亚历克斯所说

谢谢。 效果很好!