我有一个WinForms组合框,其数据集设置为自定义类的列表。我将这些项目显示为颜色(基于类中的属性),并希望仅显示颜色(即没有文本)。我通过DrawItem事件在下拉列表中将项目显示为颜色,但这对于comboBox本身(下拉菜单以外的部分)不起作用。我尝试将ForeGround颜色更改为透明颜色,但这也没有用。我真正喜欢的是comboBox.DisplayMember = "None";
或类似的东西。
实现这一目标的最佳方法是什么?
编辑:所以经过一番摆弄后,我找到了一个解决方案:添加一个"无"像这样的类属性:
public string None
{
get
{
return "";
}
}
然后我可以像我之前提到的那样comboBox.DisplayMember = "None";
。但我认为问题仍然存在:是否有更好的方法?
答案 0 :(得分:3)
您可以将ComboBox控件设置为颜色选择器,以使用DrawItem
事件显示和选择颜色,并且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);
}
}
的更多信息
答案 1 :(得分:0)
作为我的"伪解决方案"这里似乎是最好的解决方案,我只是将其复制到这里:
由于我的comboBox中的项目是自定义类,因此我向该类添加了另一个属性:
public string None
{
get
{
return "";
}
}
我设置了comboBox.DisplayMember = "None";
。这实现了我正在寻找的结果