首页 文章

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

提问于
浏览
2

无论如何都要停止winforms组合框中的选定项目在设置时自动突出显示? (通过组合框属性SelectedIndex或SelectedItem) .

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

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

有任何想法吗?

谢谢

2 回答

  • 1

    这似乎是 ComboBox 的本机Windows实现中的错误, DropDownStyleDropDown .

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

    Editbox portion of ComboBox gets selected automatically

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

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

    enter image description here

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

相关问题