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

С#: изменить цвет элементов списка

Я работаю над программой в формах Windows. У меня есть список и я проверяю данные. Я хочу, чтобы в список были добавлены правильные данные с зеленым цветом, в то время как недопустимые данные добавлены с красным цветом, и я также хочу, чтобы из списка было автоматически прокрутите вниз, когда элемент добавлен и спасибо

код:

try
{
    validatedata;
    listBox1.Items.Add("Successfully validated the data  : "+validateddata);
}
catch()
{
    listBox1.Items.Add("Failed to validate data: " +validateddata);
}
4b9b3361

Ответ 1

Предполагая WinForms, это то, что я сделал бы:

Начните с того, что класс должен содержать элемент для добавления в список.

public class MyListBoxItem {
    public MyListBoxItem(Color c, string m) { 
        ItemColor = c; 
        Message = m;
    }
    public Color ItemColor { get; set; }
    public string Message { get; set; }
}

Добавьте элементы в свой список с помощью этого кода:

listBox1.Items.Add(new MyListBoxItem(Colors.Green, "Validated data successfully"));
listBox1.Items.Add(new MyListBoxItem(Colors.Red, "Failed to validate data"));

В свойствах ListBox установите DrawMode на OwnerDrawFixed и создайте обработчик событий для события DrawItem. Это позволяет вам рисовать каждый элемент, как хотите.

В событии DrawItem:

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    MyListBoxItem item = listBox1.Items[e.Index] as MyListBoxItem; // Get the current item and cast it to MyListBoxItem
    if (item != null) 
    {
        e.Graphics.DrawString( // Draw the appropriate text in the ListBox
            item.Message, // The message linked to the item
            listBox1.Font, // Take the font from the listbox
            new SolidBrush(item.ItemColor), // Set the color 
            0, // X pixel coordinate
            e.Index * listBox1.ItemHeight // Y pixel coordinate.  Multiply the index by the ItemHeight defined in the listbox.
        );
    }
    else 
    {
         // The item isn't a MyListBoxItem, do something about it
    }
}

Есть несколько ограничений - главное, что вам нужно будет написать свой собственный обработчик кликов и перерисовать соответствующие элементы, чтобы они отображались как выбранные, так как Windows не будет делать это в режиме OwnerDraw. Однако, если это просто предназначено для журнала событий, происходящих в вашем приложении, вам могут не нравиться выбор элементов, которые можно выбрать.

Чтобы перейти к последнему пункту, попробуйте

listBox1.TopIndex = listBox1.Items.Count - 1;

Ответ 2

Не совсем ответ на ваш вопрос, однако вы можете посмотреть ObjectListView. Это ListView, а не список, но он очень гибкий и простой в использовании. Он может использоваться с одним столбцом для представления ваших данных.

Я использую его для цветного состояния каждой строки

http://objectlistview.sourceforge.net/cs/index.html

Это конечно для WinForms.

Ответ 3

Как насчет

            MyLB is a listbox

            Label ll = new Label();
            ll.Width = MyLB.Width;
            ll.Content = ss;
            if(///<some condition>///)
                ll.Background = Brushes.LightGreen;
            else
                ll.Background = Brushes.LightPink;
            MyLB.Items.Add(ll);