如何更改 ListView 控件中单个子项的前景色?

Posted

技术标签:

【中文标题】如何更改 ListView 控件中单个子项的前景色?【英文标题】:How can I change the ForeColor of a single sub item in a ListView control? 【发布时间】:2011-06-02 09:09:16 【问题描述】:

我有一个 Windows 窗体应用程序,其中有一个 ListView 控件。我想更改单个子项的前景色。尽管我已经设法更改了整行或整列的颜色,但我还没有想出一种方法来为单个子项执行此操作。有谁知道这样做的方法吗?

【问题讨论】:

【参考方案1】:

解决方案相当简单,并在ListViewSubItem.ForeColor property 文档的备注部分中指出:

如果拥有子项的ListViewItemUseItemStyleForSubItems 属性设置为true,则设置此属性无效。

默认设置旨在为 ListView 控件中的单个项目所拥有的所有子项目保持一致的外观,以便您只需在一个地方更改属性。 要更改默认行为,您需要将特定ListViewItemUseItemStyleForSubItems property 设置为“False”。

完成此操作后,您可以调整单个子项的ForeColor(或任何其他)属性。例如:

myListView.Items[0].UseItemStyleForSubItems = false;
myListView.Items[0].SubItems[1].ForeColor = Color.Red;

【讨论】:

【参考方案2】:

一种方法是为所有子项设置颜色并更改为您想要的颜色。

示例代码:

private void btn_Add_Click(object sender, EventArgs e)
    

        ListViewItem lvi = new ListViewItem();
        ListViewItem.ListViewSubItem lvsi1 = new ListViewItem.ListViewSubItem();
        ListViewItem.ListViewSubItem lvsi2 = new ListViewItem.ListViewSubItem();

        lvi.Text = tb_Main.Text;
        lvsi1.Text = tb_Sub1.Text;
        lvsi2.Text = tb_Sub2.Text;

        lvi.UseItemStyleForSubItems = false;

        lv_List.ForeColor = Color.Black;

        if (lvsi1.Text == tb_Different.Text)
        
            lvsi1.ForeColor = Color.Red;
        

        if (lvsi2.Text == tb_Different.Text)
        
            lvsi2[2].ForeColor = Color.Red;
        

        lv_List.Items.Add(lvi);
        lvi.SubItems.Add(lvsi1);
        lvi.SubItems.Add(lvsi2);

    

【讨论】:

【参考方案3】:

此示例将为每个值为“Monday”的子项着色

public static void colorList(ListView lsvMain)
               
       
        foreach (ListViewItem lvw in lsvMain.Items)
        
            lvw.UseItemStyleForSubItems = false;

            for (int i = 0; i < lsvMain.Columns.Count; i++)
            
                if (lvw.SubItems[i].Text.ToString() == "Monday")
                
                    lvw.SubItems[i].BackColor = Color.Red;
                    lvw.SubItems[i].ForeColor = Color.White;
                
                else 
                    lvw.SubItems[i].BackColor = Color.White;
                    lvw.SubItems[i].ForeColor = Color.Black; 
                
            
 
              
    

 
 

【讨论】:

【参考方案4】:

以下是我展示多客户端 SCCM 推送/删除结果的方法。传递的 CSV 是(字符串 ClientName,字符串 PackageName,字符串 EventType,bool 结果),但我想显示最长的字段,最后显示包名称,并在结果中更容易看到成功/失败的颜色。

private void MultiClientResultForm_Load(object sender, EventArgs e)
    
        foreach (string token in Main.ClientListResults)
        
            string[] ResultRecord = token.Split(new string[]  "," , StringSplitOptions.None);
            if (ResultRecord[0] != "")
            
                ListViewItem row = new ListViewItem(ResultRecord[0]);
                row.SubItems.Add(new ListViewItem.ListViewSubItem(row, ResultRecord[2]));
                if (ResultRecord[3] == "true")
                
                    row.SubItems.Add(new ListViewItem.ListViewSubItem(row, "Success"));
                    row.SubItems[2].ForeColor = Color.ForestGreen;
                
                else 
                
                    row.SubItems.Add(new ListViewItem.ListViewSubItem(row, "Fail"));
                    row.SubItems[2].ForeColor = Color.DarkRed;
                
                row.SubItems.Add(new ListViewItem.ListViewSubItem(row, ResultRecord[3]));
                row.SubItems.Add(new ListViewItem.ListViewSubItem(row, ResultRecord[1]));
                listViewResults.Items.Add(row);
            
        
    

【讨论】:

以上是关于如何更改 ListView 控件中单个子项的前景色?的主要内容,如果未能解决你的问题,请参考以下文章

更改文本框中文本的前景色和背景色

如何在视图中更改图像的前景色

如何更改 MFC/VC++ 对话框应用程序中按钮的前景色(即文本或标题)

如何在 Mac OS X 上更改 Tkinter 按钮的前景色或背景色?

更改状态栏的前景色

所选列表框项的前景色的 Wpf 样式资源