Подтвердить что ты не робот

Как я могу изменить ForeColor одного элемента в элементе управления ListView?

У меня есть приложение Windows Form, в котором у меня есть элемент управления ListView. Я хочу изменить forecolor одного подэлемента. Хотя мне удалось изменить цвет целой строки или столбца, я не понял способ сделать это для одного подэлемента. Кто-нибудь знает способ сделать это?

4b9b3361

Ответ 1

Решение довольно просто и указано в разделе "Примечания" документации для свойства ListViewSubItem.ForeColor:

Если для свойства UseItemStyleForSubItems объекта ListViewItem, которому принадлежит данный подэлемент, установлено значение true, установка этого свойства не имеет эффекта.

Значение по умолчанию предназначено для поддержания согласованного внешнего вида для всех подэлементов, принадлежащих одному элементу в элементе управления ListView, поэтому вам нужно только изменить свойства в одном месте. Чтобы изменить поведение по умолчанию, вам необходимо установить свойство UseItemStyleForSubItems конкретного ListViewItem на "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![enter image description here][2].ForeColor = Color.Red;
        }

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

    }

enter image description here

Ответ 3

В этом примере будет отображаться каждый элемент, который имеет значение "Понедельник"

public static void colorListcolor(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; 
                }
            }

        }      
    }[![Screenshot of the result from the code above][1]][1]

Ответ 4

Вот как я сделал это, чтобы показать результаты многоклиентского SCCM push/remove. CSV прошел (строка ClientName, строка PackageName, строка EventType, bool Result), но я хотел отобразить самое длинное поле, имя пакета 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);
            }
        }
    }