【问题标题】:Hide text in comboBox在组合框中隐藏文本
【发布时间】:2023-03-27 20:57:01
【问题描述】:

我有一个 WinForms 组合框,其中数据源设置为自定义类的列表。我将这些项目显示为颜色(基于类中的属性)并希望显示颜色(即无文本)。我通过 DrawItem 事件在下拉列表中将项目显示为颜色,但这不适用于组合框本身(下拉列表以外的部分)。我尝试将前景颜色更改为透明,但这也不起作用。我真正想要的是comboBox.DisplayMember = "None"; 或类似的东西。

最好的方法是什么?

编辑:经过一番折腾,我找到了一个解决方案:向类添加“None”属性,如下所示:

public string None
{
    get
    {
        return "";
    }
}

然后我可以像我之前提到的那样做comboBox.DisplayMember = "None";。但我认为问题仍然存在:有没有更好的方法?

【问题讨论】:

  • 你想显示为空显示成员?
  • @WillyDavidJr 是的。我希望每个组合框项目的文本为空
  • 可能是一个愚蠢的问题,但您是否尝试将前景设置为白色而不是透明?
  • 啊试过了...选择颜色保持不变。

标签: c# winforms combobox


【解决方案1】:

您可以使用 DrawItem 事件将 ComboBox 控件作为颜色选择器来显示和选择颜色,并且 ComboBox 控件还有一个名为 DrawMode 的属性,用于确定操作系统或代码是否将处理绘制列表中的项目。必须使用“属性”窗口将此属性设置为 OwnerDrawFixed,以便调用 DrawItem 事件实现。

private void ColorComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
    Graphics g = e.Graphics;
    Rectangle rect = e.Bounds;
    if (e.Index >= 0)
    {
       Color c = Color.FromName(n);
       Brush b = new SolidBrush(c);
       g.DrawString(n, f, Brushes.Black, rect.X, rect.Top);
       g.FillRectangle(b, rect.X, rect.Y + 5, rect.Width -10, rect.Height - 10);
    }
}

你可以阅读更多关于CodeProject: Color Picker Combo Box

【讨论】:

  • 是的,我已经知道了(参考同一篇文章)。但这是我的问题:i.imgur.com/jC1ufeV.png(我不希望该文本可见)
【解决方案2】:

由于我的“伪解决方案”似乎是这里最好的解决方案,所以我将它复制到这里:

由于我的组合框中的项目属于自定义类,因此我向该类添加了另一个属性:

public string None
{
    get
    {
        return "";
    }
}

我设置了comboBox.DisplayMember = "None";。这达到了我想要的结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2010-12-20
    • 2011-10-24
    • 2022-01-21
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多