2009-05-13 12 views
2

J'ai un scénario dans lequel je remplis une zone de liste déroulante avec les noms de modèles. Parmi les modèles, un serait un modèle par défaut. Je veux mettre en évidence le nom de modèle par défaut lorsque je remplis la zone de liste déroulante (de sorte que l'utilisateur sache lequel parmi les éléments est la valeur par défaut). Est-il possible de le faire? Si oui comment? J'utilise un Windows Form en C# 2.0.Surlignage d'un élément particulier dans une zone de liste déroulante

Répondre

8

Cela dépend un peu de la façon dont vous voulez mettre l'élément en surbrillance. Si vous souhaitez rendre le texte de l'élément par défaut en gras, vous pouvez le faire comme ceci (pour que cela fonctionne, vous devez définir le DrawMode du ComboBox sur OwnerDrawFixed, et bien sûr connecter l'événement DrawItem au gestionnaire d'événements) :

J'ai peuplé la zone de liste déroulante avec des objets de modèle, défini comme ceci:

private class Template 
{ 
    public string Name { get; set; } 
    public bool IsDefault { get; set; } 

    public override string ToString() 
    { 
     return this.Name; 
    } 
} 

... et l'événement DrawItem est mis en œuvre comme ceci:

private void ComboBox_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    if (e.Index < 0) 
    { 
     return; 
    } 
    Template template = comboBox1.Items[e.Index] as Template; 
    if (template != null) 
    { 

     Font font = comboBox1.Font; 
     Brush backgroundColor; 
     Brush textColor; 

     if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 
     { 
      backgroundColor = SystemBrushes.Highlight; 
      textColor = SystemBrushes.HighlightText; 
     } 
     else 
     { 
      backgroundColor = SystemBrushes.Window; 
      textColor = SystemBrushes.WindowText; 
     } 
     if (template.IsDefault) 
     { 
      font = new Font(font, FontStyle.Bold); 
     } 
     e.Graphics.FillRectangle(backgroundColor, e.Bounds); 
     e.Graphics.DrawString(template.Name, font, textColor, e.Bounds); 

    } 
} 

cela devrait vous permettre de continuer à la bonne direction, je espérer.

+0

Juste implémenté votre soln. Merci un million Fredrik !!! Ce code m'a semblé MAGIQUE :) –

0

Définissez DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable de la zone de liste déroulante. Et, Remplacer les méthodes Combobox_MeasureItem() et Combobox_DrawItem(), pour y parvenir.

Questions connexes