C#WinFormscombobox中突出显示的文本

无论如何都要阻止winformscombobox中的选定项目在设置时自动突出显示? (通过combobox属性SelectedIndex或SelectedItem)。

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

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

有任何想法吗?

谢谢

这似乎是使用DropDownStyle DropDownComboBox的本机Windows实现中的错误。

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

ComboBox的Editbox部分会自动选中

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

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

在此处输入图像描述

这会奏效

 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); }