【问题标题】:C# Highlighted text in WinForms combo boxWinForms组合框中的C#突出显示文本
【发布时间】:2014-03-30 12:31:29
【问题描述】:

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

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

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

有什么想法吗?

谢谢

【问题讨论】:

标签: c# winforms combobox highlighting


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    这似乎是ComboBoxDropDownStyleDropDown 的本机Windows 实现中的一个错误。

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

    Editbox portion of ComboBox gets selected automatically

    但是,我发现即使是解决此错误的骇人听闻的修复也并不总是有效。如果ComboBoxTableLayoutPanel 中,并且如果TableLayoutPanel 有不止一列具有Percent 大小类型,那么该修复通常不起作用。

    一张图片胜过一千个字。请参阅以下我为演示问题而制作的表单的屏幕截图。

    【讨论】:

    • 我已经为此苦苦挣扎了几个月,而您的解决方案是第一个起作用的。我在继承的类中扩展了 ComboBox,覆盖了 OnResize(e As EventArgs) 子并将 SelectionLength = 0 放在 MyBase.OnResize(e) 之后。非常感谢!
    【解决方案3】:

    这会起作用

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

    【讨论】:

    • 谢谢。我会试一试,如果它可以解决问题,请告诉您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多