Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何给列表框中的行着色?_.net_Winforms_Listbox - Fatal编程技术网

.net 如何给列表框中的行着色?

.net 如何给列表框中的行着色?,.net,winforms,listbox,.net,Winforms,Listbox,嘿! 我想在列表框上显示我的日志系统输出,根据级别或日志条目自定义突出显示。(常规、警告、错误、调试、跟踪) 所以我想添加一个新的东西,比如typeoflog,但我不知道怎么做 somelistbox.Items.Add("Error!",Type.Error); 我有这个代码,它给物品上色,取决于物品编号,但这不是我要找的 private void general_log_DrawItem(object sender, DrawItemEventArgs e) {

嘿! 我想在列表框上显示我的日志系统输出,根据级别或日志条目自定义突出显示。(常规、警告、错误、调试、跟踪)

所以我想添加一个新的东西,比如typeoflog,但我不知道怎么做

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;