Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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
C# 如何更改ListView控件中单个子项的前景色?_C#_.net_Winforms_Listview - Fatal编程技术网

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

C# 如何更改ListView控件中单个子项的前景色?,c#,.net,winforms,listview,C#,.net,Winforms,Listview,我有一个Windows窗体应用程序,其中有一个ListView控件。我想更改单个子项的前景色。虽然我已经设法改变了整行或整列的颜色,但我还没有找到一种方法来改变单个子项的颜色。有人知道这样做的方法吗?解决方案相当简单,并在文档的备注部分指出: 如果拥有子项的ListViewItem的UseItemStyleForSubItems属性设置为true,则设置此属性无效 默认设置旨在为ListView控件中单个项所拥有的所有子项保持一致的外观,以便您只需在一个位置更改属性要更改默认行为,需要将特定的L

我有一个Windows窗体应用程序,其中有一个
ListView
控件。我想更改单个子项的前景色。虽然我已经设法改变了整行或整列的颜色,但我还没有找到一种方法来改变单个子项的颜色。有人知道这样做的方法吗?

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

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

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

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

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

下面是我如何显示多客户端SCCM推/删除的结果。传递的CSV是(string ClientName、string PackageName、string EventType、bool Result),但我希望显示最长的字段,Package Name last,并将结果显示在更容易看到成功/失败颜色的位置

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);
            }
        }
    }

一种方法是为所有子项设置颜色,并更改为所需的颜色

示例代码:

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);

    }

此示例将为每个值为“星期一”的子项着色

publicstaticvoidcolorlist(ListView lsvMain)
{           
foreach(lsvMain.Items中的ListViewItem lvw)
{
lvw.UseItemStyleForSubItems=false;
对于(int i=0;i

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; 
                }
            }
 
        }      
    }