2011-08-01 17 views
13

sto lavorando al programma su Windows Form Ho una lista e sto convalidando i dati Voglio che i dati corretti vengano aggiunti alla lista con il colore verde mentre i dati non validi sono aggiunti con il colore rosso e anch'io vuole dalla casella di riepilogo a scorrimento automatico verso il basso quando si aggiunge una voce e grazieC#: cambia colore negli elementi della casella di riepilogo

codice:

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

Hai dimenticato di chiedere in realtà una domanda * *. – jv42

+0

1. Passa attraverso le tue domande e le risposte che ti sembrano corrette o utili. 2) specificare la domanda e la tecnologia (WinForms, WPF ...) – Tigran

+0

E hai dimenticato di menzionare WinForms/WPF/WebForms/... –

risposta

30

Supponendo WinForms, questo è quello che vorrei fare:

Inizia facendo una classe per contenere l'elemento da aggiungere alla casella di riepilogo.

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

aggiungere elementi alla tua casella di riepilogo utilizzando questo codice:

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

Nelle proprietà del ListBox, impostare DrawMode a OwnerDrawFixed, e creare un gestore di eventi per l'evento DrawItem. Questo ti permette di disegnare ogni oggetto come preferisci.

Nella DrawItem evento:

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

Ci sono alcune limitazioni - il principale è che avresti bisogno di scrivere il proprio gestore di clic e ridisegnare gli elementi adeguati per renderli risultano selezionati, a partire da Windows ha vinto farlo nella modalità OwnerDraw. Tuttavia, se questo è solo inteso come un log delle cose che accadono nella tua applicazione, potresti non interessarti agli oggetti che appaiono selezionabili.

Per scorrere fino all'ultima voce provare

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

grazie mille amico per il tuo aiuto – BOSS

+4

Ci sono modi migliori per implementare il gestore DrawItem - vedi http://stackoverflow.com/a/2268234/46635. – splintor

+4

Hai dimenticato di aggiungere: 'this.listBox1.DrawMode = DrawMode.OwnerDrawFixed;' –

1

Non proprio una risposta alla tua domanda ma si potrebbe desiderare di guardare ObjectListView. È una ListView piuttosto che una listbox ma è molto flessibile e facile da usare. Potrebbe essere usato con una sola colonna per rappresentare i dati

Io lo uso per colorare lo stato di ogni linea di

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

Questo è per WinForms, naturalmente.

+0

grazie mille amico per il tuo aiuto – BOSS

0

Come su

  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); 
Problemi correlati