创建具有不同背景颜色的行列表的最佳方法

时间:2013-05-31 10:28:40

标签: c# winforms

我希望在我的应用程序中有一个具有不同优先级的消息列表。我希望通过改变背景颜色来明确这些级别。

我已经使用ListViewItem实现了这一点,但问题是,当View属性设置为Details时,必须有列。另外,我无法使用ListView放入的窗口来确定列的大小。

ListViewItem lvi = lvMessages.Items.Add(message);
switch (level) {
  case Level.Warning:
    lvi.BackColor = Color.Yellow;
  break;
  case Level.Error:
    lvi.BackColor = Color.Red;
  break;
}

如果具有不同背景颜色的线条,还有其他方法可以制作漂亮的可扩展列表吗?

1 个答案:

答案 0 :(得分:0)

试试这个:(请记住,这会给你一个启动。有更好的方法来实现它。

    enum Level
    {
        Warning,
        Error
    }

    class ITemInListView
    {
        public string message { get; set; }
        public Level level { get; set; }
    }

将ListView属性设置为:

  1. 添加一个包含空Text属性的列。
  2. 将View属性设置为Details
  3. 将HeaderStyle属性设置为None。
  4. 然后将其用作(仅作为示例):

        var list = new List<ITemInListView>();
        var item1 = new ITemInListView()
        {
            message = "This is item1",
            level = Level.Warning
        };
    
        var item2 = new ITemInListView()
        {
            message = "This is item2",
            level = Level.Error
        };
    
        var item3 = new ITemInListView()
        {
            message = "This is item3",
            level = Level.Error
        };
    
        var item4 = new ITemInListView()
        {
            message = "This is item4",
            level = Level.Warning
        };
    
        list.Add(item1);
        list.Add(item2);
        list.Add(item3);
        list.Add(item4);
    
    
        //Set the width of the column to be the width of the ListView control so it expands to full size.
        lvMessages.Columns[0].Width = lvMessages.Width;
    
        foreach (ITemInListView item in list)
        {
            var lvi = lvMessages.Items.Add(item.message);
            switch (item.level)
            {
                case Level.Warning:
                    lvi.BackColor = Color.Yellow;
                    break;
                case Level.Error:
                    lvi.BackColor = Color.Red;
                    break;
            }
        }