C#WinForms组合框中突出显示的文本

时间:2014-02-27 07:58:59

标签: c# winforms combobox highlighting

是否有任何方法可以阻止winforms组合框中的选定项目在设置时自动突出显示? (通过组合框属性SelectedIndex或SelectedItem)。

我们使用一组项目填充组合框,然后设置我们想要在组合中显示的项目的索引,但这会导致文本突出显示。当组合框被禁用时,这意味着读取文本非常困难,因为高亮颜色为蓝色,文本颜色为白色。看起来这种行为是设计的,但它非常烦人!

我在网上发现并尝试过的唯一解决方案是将组合框控件子类化,但这太具侵入性,这意味着我们必须替换应用程序中的所有组合框来解决这个问题。我已经尝试在加载父控件后将组合上的SelectionLength属性设置为0,并且还尝试在组合框上调用Select(0,0),但都没有达到预期的效果。

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:2)

这似乎是ComboBoxDropDownStyle DropDown的原生Windows实施中的错误。

我认为最好的解决方案是处理ComboBox的{​​{1}}事件,将Resize属性设置为0(零)。该解决方案详细解答了这个问题:

Editbox portion of ComboBox gets selected automatically

然而,我发现即使是解决这个bug的黑客修复并不总是有效。如果SelectionLength位于ComboBox中,并且TableLayoutPanel包含多个TableLayoutPanel大小类型的列,则该修复通常不起作用。

一张图片胜过千言万语。请参阅以下用于演示此问题的表单的屏幕截图。

enter image description here

答案 1 :(得分:0)

这将起作用

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
   // Draw the background.
   e.DrawBackground();
  // Determine the forecolor based on whether or not
  // the item is selected.
  Brush brush;
  // Get the item text.
  string text = ((ComboBox)sender).Items[e.Index].ToString();
  if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
  {
    brush = Brushes.White;
  }
     // Draw the text.
    e.Graphics.DrawString(text, ((Control)sender).Font, brush, e.Bounds.X, e.Bounds.Y);
}

答案 2 :(得分:0)

突出显示从零索引到最后一个索引的文本:

comboBox1.Select(0, comboBox1.Text.Length);

突出显示从特定索引到最后一个索引的文本(在组合框中输入字符时,对于搜索文本很有用)

comboBox1.Select(text.Length, comboBox1.Text.Length);