2014-02-27 48 views
2

反正有没有办法阻止winforms组合框中的选定项目在设置时自动突出显示? (通过组合框属性SelectedIndex或SelectedItem)。C#在WinForms组合框中突出显示的文本

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

我在网上找到的唯一解决方案,并尝试哪些作品是继承组合框的控件,但这太侵入了,意味着我们将不得不替换我们的应用程序中的所有组合框来解决此问题。我也尝试在父控件加载后将组合框上的SelectionLength属性设置为0,并尝试在组合框上调用Select(0,0),但都没有达到所需的效果。

任何想法?

感谢

+1

类似的问题在这里:http://stackoverflow.com/questions/786119/editbox-portion-of-combobox-gets-selected-automatically – CJBS

回答

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

感谢。我会试一试,让你知道它是否能解决问题。 – user3359423

1

这似乎是在本地Windows执行ComboBoxDropDownDropDownStyle的错误。

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

Editbox portion of ComboBox gets selected automatically

然而,我发现,即使是hackish的补丁来解决这个bug并不总是奏效。如果ComboBoxTableLayoutPanel中,并且该TableLayoutPanel具有多个具有Percent大小类型的列,则该修复通常不起作用。

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

enter image description here

+1

我一直在为此奋斗了几个月,您的解决方案是第一个工作。我将ComboBox扩展到一个继承的类中,并在'MyBase.OnResize(e)'之后立即覆盖'OnResize(e As EventArgs)'sub并将'SelectionLength = 0'。非常感谢! – VBobCat