Как я могу изменить ForeColor одного вложенного элемента в элементе управления ListView? - PullRequest
21 голосов
/ 02 января 2011

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

Ответы [ 4 ]

55 голосов
/ 02 января 2011

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

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

Параметр по умолчанию предназначен для обеспечения согласованного внешнего вида для всех подэлементов, принадлежащих одному элементу в элементе управления ListView, поэтому вам нужно изменять свойства только в одном месте. Чтобы изменить поведение по умолчанию, необходимо установить для свойства UseItemStyleForSubItems определенного ListViewItem значение «Ложь».

После этого вы можете настроить ForeColor (или любое другое) свойство отдельного подпункта. Например:

myListView.Items[0].UseItemStyleForSubItems = false;
myListView.Items[0].SubItems[1].ForeColor = Color.Red;
4 голосов
/ 24 января 2015

Можно было бы установить цвет для всех подэлементов и изменить на тот, который вы хотите.

Пример кода:

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 голосов
/ 26 сентября 2015

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

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]
1 голос
/ 21 января 2014

Вот как я это сделал, чтобы показать результаты многопользовательского SCCM push / remove. Передано CSV (строка ClientName, строка PackageName, строка EventType, bool Result), но я хотел отобразить самое длинное поле, имя пакета последнее и получить результаты, где было бы легче увидеть цвет для успеха / неудачи.

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);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...