隐藏comboBox中的文本

时间:2017-02-08 04:39:35

标签: c# winforms combobox

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

实现这一目标的最佳方法是什么?

编辑:所以经过一番摆弄后,我找到了一个解决方案:添加一个"无"像这样的类属性:

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

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

2 个答案:

答案 0 :(得分:3)

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

enter image description here

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

的更多信息

答案 1 :(得分:0)

作为我的"伪解决方案"这里似乎是最好的解决方案,我只是将其复制到这里:

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

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

我设置了comboBox.DisplayMember = "None";。这实现了我正在寻找的结果