.net 如何给列表框中的行着色?
嘿! 我想在列表框上显示我的日志系统输出,根据级别或日志条目自定义突出显示。(常规、警告、错误、调试、跟踪) 所以我想添加一个新的东西,比如typeoflog,但我不知道怎么做.net 如何给列表框中的行着色?,.net,winforms,listbox,.net,Winforms,Listbox,嘿! 我想在列表框上显示我的日志系统输出,根据级别或日志条目自定义突出显示。(常规、警告、错误、调试、跟踪) 所以我想添加一个新的东西,比如typeoflog,但我不知道怎么做 somelistbox.Items.Add("Error!",Type.Error); 我有这个代码,它给物品上色,取决于物品编号,但这不是我要找的 private void general_log_DrawItem(object sender, DrawItemEventArgs e) {
somelistbox.Items.Add("Error!",Type.Error);
我有这个代码,它给物品上色,取决于物品编号,但这不是我要找的
private void general_log_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
Brush myBrush = Brushes.Black;
switch (actualLogType)
{
case LogTypes.General:
myBrush = Brushes.Black;
break;
case LogTypes.Warning:
myBrush = Brushes.Orange;
break;
case LogTypes.Error:
myBrush = Brushes.Purple;
break;
case LogTypes.Debug:
myBrush = Brushes.AntiqueWhite;
break;
}
e.Graphics.DrawString(((ListBox)sender).Items[e.Index].ToString(),
e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
e.DrawFocusRectangle();
}
更新:如果有人还在研究这个问题,我建议大家看看NLog项目。它具有彩色richtextbox目标。如果它不是WPF listbox,则需要使用Win32 API。这就是你想要的吗 更新 无需使用WIn32 API:
列表框不仅可以存储字符串,还可以存储对象。如果您想利用这一点,您的案例中的列表项的状态不仅仅是文本。添加一个嵌套的辅助类:
private enum itemType { error, warning }
private class listObject {
public listObject(string txt, itemType type) { Text = txt; Type = type; }
public string Text;
public itemType Type;
public override string ToString() { return Text; }
}
注意ToString()重写如何生成用户看到的文本。现在只需将项目添加到列表框中,如下所示:
listBox1.Items.Add(new listObject("blah", itemType.warning));
并在DrawItem事件处理程序中将对象强制转换回类:
private void listBox1_DrawItem(object sender, DrawItemEventArgs e) {
var obj = listBox1.Items[e.Index] as listObject;
// etc..
}
并使用obj.Type确定颜色。您还可以使用ListView而不是ListBox,以便访问其BackColor属性:
listView1.Items[i].BackColor = Color.Black;
它不是WPF列表框。如何做到这一点?好吧,还有一个管理的方法,看看这个:你的代码非常酷,但我还不能让它工作。你能把整个绘图方法写给我吗?非常感谢!这里是我如何尝试的,如果你想要不同的颜色,你实际上必须使用不同的画笔。使用开关(obj.Type){}来创建它。就像您在原始代码段中所做的那样。您需要检查e.Index,并且仅当值>=0时才执行自定义绘图代码。添加一个if()语句。嗯,我现在调试了它,问题是当我单击我的按钮时没有调用DrawnItem事件:/private void bot_stop_click(object sender,EventArgs e){general_log_Add_item(“ASDASD”,Logging.LogTypes.general)}嗯,该项可能不可见。滚动列表框。请开始一个新的问题,这个问题与原来的问题相差很远。
listView1.Items[i].BackColor = Color.Black;