Изменить цвет списка, если

1

Мне нужна помощь в изменении цвета отдельных элементов в списке.

Мой код:

namespace WindowsFormsApplication6
{
    public partial class Form2 : Form
    {
        List<string> lst;


        public Form2()
        {
            InitializeComponent();
            dateTimePicker1.Format = DateTimePickerFormat.Custom;
            dateTimePicker1.CustomFormat = "dd/MM/yyyy  HH:mm";
            lst = new List<string>();   
        }

        private void BindList()
        {
            lst = (lst.OrderByDescending(s => s.Substring(s.LastIndexOf(" "), s.Length - s.LastIndexOf(" ")))).ToList();
            listBox1.DataSource = lst;
        }

        private void button1_Click(object sender, EventArgs e)
        {       
                string s = textBox1.Text + ", " + Convert.ToDateTime(this.dateTimePicker1.Value).ToString("dd/mm/yyyy HH:mm");
                lst.Add(s);
                BindList();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            lst.Remove(listBox1.SelectedItem.ToString());
            BindList();    
        }

        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {
            dateTimePicker1.CustomFormat = "dd/MM/yyyy  HH:mm";        
        }       
    }
}

Я добавляю текст из TextBox1 и время и дату из DateTimePicker1 в listBox1.

Мне нужен элемент в списке, чтобы он стал красным, если он меньше 1 часа от текущего времени.

То, что я пробовал до сих пор:

DateTime current = System.DateTime.Now.AddHours(+1);
DateTime deadline = Convert.ToDateTime(dateTimePicker1.Value);

do
{
   // missing this part
}
   while (current <= deadline); 

Если вы можете закончить это или иметь другое решение, было бы здорово.

Благодаря !

Теги:
visual-studio
datetime
listbox

1 ответ

0

Когда вы инициализируете свою форму, вам нужно что-то вроде этого:

listBox1.DrawMode = DrawMode.OwnerDrawFixed;
listBox1.DrawItem += listBox1_DrawItem;

Первая строка указывает, что элементы списка будут рисоваться кодом, который вы поставляете, а вторая строка назначает обработчик события, который будет выполнять чертеж. Затем вам просто нужно создать метод listBox1_DrawItem(). Что-то вроде этого должно делать:

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    // DrawItemEventArgs::Index gives you the index of the item being drawn.
    var itemText = listBox1.Items[e.Index].ToString();

    // Get a red brush if the item is a DateTime less than an hour away, or a black
    // brush otherwise.
    DateTime itemTime, deadline = DateTime.Now.AddHours(1);
    var brush = (DateTime.TryParse(itemText, out itemTime) && itemTime < deadline) ? Brushes.Red : Brushes.Black;

    // Several other members of DrawItemEventArgs used here; see class documentation.
    e.DrawBackground();
    e.Graphics.DrawString(itemText, e.Font, brush, e.Bounds);
}

Обратитесь к этой странице за подробной информацией о различных членах DrawItemEventArgs которые я использую здесь.

  • 0
    Не могу заставить это работать :(
  • 0
    Вы должны быть конкретны в отношении того, какие у вас проблемы.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню