je travaille sur un programme sur des formulaires Windows. J'ai une liste déroulante et je valide les données. Je souhaite que les données correctes soient ajoutées à la liste déroulante avec la couleur verte tandis que les données non valides sont ajoutées en couleur rouge. un article est ajouté et merci
code:
try
{
validatedata;
listBox1.Items.Add("Successfully validated the data : "+validateddata);
}
catch()
{
listBox1.Items.Add("Failed to validate data: " +validateddata);
}
En supposant que WinForms, voici ce que je ferais:
Commencez par faire en sorte qu'une classe contienne l'élément à ajouter à la liste.
public class MyListBoxItem {
public MyListBoxItem(Color c, string m) {
ItemColor = c;
Message = m;
}
public Color ItemColor { get; set; }
public string Message { get; set; }
}
Ajoutez des éléments à votre liste en utilisant ce code:
listBox1.Items.Add(new MyListBoxItem(Colors.Green, "Validated data successfully"));
listBox1.Items.Add(new MyListBoxItem(Colors.Red, "Failed to validate data"));
Dans les propriétés du contrôle ListBox, définissez DrawMode sur OwnerDrawFixed et créez un gestionnaire d'événements pour l'événement DrawItem. Cela vous permet de dessiner chaque élément comme vous le souhaitez.
Dans l'événement 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
}
}
Il existe quelques limitations - la principale étant que vous deviez écrire votre propre gestionnaire de clics et redessiner les éléments appropriés pour les faire apparaître comme étant sélectionnés, car Windows ne le ferait pas en mode OwnerDraw. Toutefois, s'il s'agit simplement d'un journal des événements de votre application, il est possible que vous ne vous préoccupiez pas des éléments pouvant être sélectionnés.
Pour faire défiler jusqu'au dernier article, essayez
listBox1.TopIndex = listBox1.Items.Count - 1;
Ce n'est pas vraiment une réponse à votre question, mais vous voudrez peut-être regarder ObjectListView. C'est une liste plutôt qu'une liste mais elle est très flexible et facile à utiliser. Il pourrait être utilisé avec une seule colonne pour représenter vos données
Je l'utilise pour colorier le statut de chaque ligne
http://objectlistview.sourceforge.net/cs/index.html
Ceci est pour WinForms bien sûr.
Que diriez-vous
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);