2014-05-25 67 views
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";   
     }  
    } 
} 

我从DateTimePicker1添加从TextBox1的文本和时间和日期listBox1中。

如果当前时间少于1小时,我需要列表框中的项目变成红色。

我试过到目前为止:

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

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

如果你能完成这个还是有不同的解决方案,这将是巨大的。

谢谢!

+0

请参阅[ListBox.DrawItem事件](http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.drawitem(v = vs.110).aspx) – LarsTech

回答

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

参考this page上的DrawItemEventArgs各成员,我在这里使用的详细信息。

+0

无法获取此内容要工作:( – user3215507

+0

你必须具体说明你有什么样的问题 –

+0

颜色不会改变,也许问题出在'DateTime itemTime,截止日期= DateTime.Now.AddHours(1); var brush =(DateTime.TryParse(itemText,out itemTime)&& itemTime user3215507