C#如何更改组合框项目的颜色?
winform上的组合框, 组合框填充数据表三列(id、名称、状态) 我想更改状态列的组合框项目的颜色C#如何更改组合框项目的颜色?,c#,winforms,colors,combobox,C#,Winforms,Colors,Combobox,winform上的组合框, 组合框填充数据表三列(id、名称、状态) 我想更改状态列的组合框项目的颜色 请给出建议。我能做到这一点,但有一个bug。 首先是几个步骤 在表单中添加组合框(comboBox1) 将comboBox1的DrawItem事件更改为Combox1\u DrawItem(我们的方法如下) 编辑:将comboBox1的绘图模式属性更改为OwnerDrawFixed或OwnerDrawVariable 实现comboBox1\u DrawItem。注意,我在ComboBoxVa
请给出建议。我能做到这一点,但有一个bug。 首先是几个步骤
DrawItem
事件更改为Combox1\u DrawItem
(我们的方法如下)绘图模式
属性更改为OwnerDrawFixed
或OwnerDrawVariable
comboBox1\u DrawItem
。注意,我在ComboBoxValue.Status上切换画笔
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
Brush brush;
var g = e.Graphics;
var rect = e.Bounds;
var n = "";
var f = new Font("Arial", 9, FontStyle.Regular);
switch (((ComboBoxValue)((ComboBox)sender).SelectedItem).Status)
{
case "one":
brush = Brushes.Red;
break;
case "two":
brush = Brushes.Green;
break;
default:
brush = Brushes.White;
break;
}
if (e.Index >= 0)
{
n = ((ComboBoxValue)((ComboBox)sender).SelectedItem).Name;
}
g.FillRectangle(brush, rect.X, rect.Y,rect.Width, rect.Height);
g.DrawString(n, f, Brushes.Black, rect.X, rect.Y);
}
public class ComboBoxValues : System.Collections.ObjectModel.Collection<ComboBoxValue>
{
public ComboBoxValues()
{
this.Add(new ComboBoxValue
{
Name = "chad",
Id = 123,
Status = "one"
});
this.Add(new ComboBoxValue
{
Name = "different chad",
Id = 123,
Status = "two"
});
}
}
public class ComboBoxValue
{
public string Name { get; set; }
public int Id { get; set; }
public string Status { get; set; }
}
您很快就会看到,由于某种原因,这些颜色似乎只有在您将鼠标移到它们上后才会改变。在我回到这个话题之前,也许其他人会意识到这个错误。祝你好运 有人在winforms(状态栏)中听说过这件事吗?我只知道WPF中的这个术语!?datatablesee中的Status列名称在这里,如果您想对颜色做出非常模糊的决定,您必须在静态位置提供状态,或者从回调中的某个位置检索状态,但也许我的答案是正确的?您是否找到了鼠标悬停的错误?@Prix,因为这几乎是3年前的事,我想不起来为什么我没有发布对bug的修复。然而回顾过去,我确信这只是一个刷新问题。尝试在切换后调用控件上的刷新。感谢您的输入,我使用定制的组合框解决了它,还提出了一个有关它的问题,因为它将我困在了其他地方,但也找到了答案并发布了;)。由于某些原因,覆盖OnDraw不会产生与此处相同的问题。
public class ComboBoxValues : System.Collections.ObjectModel.Collection<ComboBoxValue>
{
public ComboBoxValues()
{
this.Add(new ComboBoxValue
{
Name = "chad",
Id = 123,
Status = "one"
});
this.Add(new ComboBoxValue
{
Name = "different chad",
Id = 123,
Status = "two"
});
}
}
public class ComboBoxValue
{
public string Name { get; set; }
public int Id { get; set; }
public string Status { get; set; }
}
comboBox1.DataSource = new ComboBoxValues();
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Id";