none
listview可否让某个单元格的背景色不一样 RRS feed

  • 问题

  • 我是从文本文件中读回来一段历史记录,历史记录分别存储了报警跟报警后恢复正常的两种状态,所以我想如果这条记录是报警的,那么我就想让报警这一格变为红色或者整个背景为红色。我刚才用                    lvi.SubItems[5].BackColor = Color.Red;可是没有改变颜色。

            private void Treefile_AfterSelect(object sender, TreeViewEventArgs e)
            {
                string filepath,strline;
                int i=1;
                string[] splitstr;
                if (Treefile.SelectedNode.Level < 2) return;
                filepath= Treefile.SelectedNode.FullPath;
                strline = "";
                StreamReader sr = new StreamReader(Application.StartupPath + "\\"+filepath);
                LV.Items.Clear();
                while (strline != null)
                {
                    strline = sr.ReadLine();
                    if (strline != null)
                    {
                        ListViewItem lvi = new ListViewItem();
                        lvi.SubItems.Clear();
                        lvi.SubItems[0].Text=i.ToString();
                        i++;
                        splitstr=strline.Split('\t');
                        lvi.SubItems.Add(splitstr[0].ToString());
                        lvi.SubItems.Add(splitstr[1].ToString());
                        lvi.SubItems.Add(splitstr[2].ToString());
                        lvi.SubItems.Add(splitstr[3].ToString());
                        lvi.SubItems.Add(splitstr[4].ToString());
                        if (splitstr[4].ToString() == "报警")
                        {
                            lvi.SubItems[5].BackColor = Color.Red;
                        }
                        else
                        {
                            lvi.SubItems[5].BackColor = Color.Green;
                        }
                        LV.Items.Add(lvi);

                    }
                }
                sr.Close();
            }


    can you help me?

    2010年5月24日 9:04

答案

  • 试了一下,只有 ListViewItem 上的 BackColor 设置是有效的,SubItems 上的 BackColor 以及 ForeColor 设置无效。

    如果确实需要加亮一栏,而不是一行,请设置 DrawMode 为 OwnerDraw 然后用 GDI+ 自己画。这个会比较麻烦的。


    Mark Zhou
    2010年5月24日 9:16
  • 在警告的行上使用不同的图片进行区别。
    知识改变命运,奋斗成就人生!
    2010年5月24日 9:24
    版主
  • 我采用了,整行变色来表示了,如含A相字样采用了雪白色,含B相字样采用的浅橙色,含C相字样采用的天蓝色。但是结果出来之后个人感觉比较花。但看起来还是比较顺眼。

                for (int j = 0; j < LV.Items.Count; j++)
                {
                    if (LV.Items[j].SubItems[1].Text.IndexOf("A") != -1)
                    {
                        LV.Items[j].BackColor = Color.Snow;
                    }
                    else if (LV.Items[j].SubItems[1].Text.IndexOf("B") != -1)
                    {
                        LV.Items[j].BackColor = Color.Salmon;
                    }
                    else if (LV.Items[j].SubItems[1].Text.IndexOf("C") != -1)
                    {
                        LV.Items[j].BackColor = Color.SkyBlue;
                    }
                }


    can you help me?
    2010年5月25日 8:56

全部回复

  • 试了一下,只有 ListViewItem 上的 BackColor 设置是有效的,SubItems 上的 BackColor 以及 ForeColor 设置无效。

    如果确实需要加亮一栏,而不是一行,请设置 DrawMode 为 OwnerDraw 然后用 GDI+ 自己画。这个会比较麻烦的。


    Mark Zhou
    2010年5月24日 9:16
  • 用GDI+自己画的是很麻烦。有没有其它的方便办法。


    can you help me?
    2010年5月24日 9:22
  • 在警告的行上使用不同的图片进行区别。
    知识改变命运,奋斗成就人生!
    2010年5月24日 9:24
    版主
  • 我采用了,整行变色来表示了,如含A相字样采用了雪白色,含B相字样采用的浅橙色,含C相字样采用的天蓝色。但是结果出来之后个人感觉比较花。但看起来还是比较顺眼。

                for (int j = 0; j < LV.Items.Count; j++)
                {
                    if (LV.Items[j].SubItems[1].Text.IndexOf("A") != -1)
                    {
                        LV.Items[j].BackColor = Color.Snow;
                    }
                    else if (LV.Items[j].SubItems[1].Text.IndexOf("B") != -1)
                    {
                        LV.Items[j].BackColor = Color.Salmon;
                    }
                    else if (LV.Items[j].SubItems[1].Text.IndexOf("C") != -1)
                    {
                        LV.Items[j].BackColor = Color.SkyBlue;
                    }
                }


    can you help me?
    2010年5月25日 8:56