Le dernier élément du menu déroulant peut-il être coloré ?

la programmation


Salut tout le monde,

Le dernier élément d’une liste déroulante combinée peut-il être mis en surbrillance ?
La nécessité est de mettre en évidence le dernier élément dans une zone de liste déroulante (ou une zone de liste si c’est plus simple…)

Ce que j’ai essayé :

Pour remplir la case :

C#
for (int i = 0; i < 10; i++)
{
    cboTest.Items.Add(i.ToString());
}

pour obtenir le dernier article dans la boîte

C#
cboTest.SelectedIndex = 9;

mais cela signifie que vous devez connaître la taille, donc si sa variable pouvez-vous le faire

C#
while (!((ArrayComPortsNames[index] == ComPortName) ||
                       (index == ArrayComPortsNames.GetUpperBound(0))));

GetUpperBound(0) obtiendra-t-il le premier élément. Je ne suppose pas qu’il existe GetLowerBound(), comme cboTest.GetLowerBound() ??

Solution 1

Comment être sûr qu’il y a 10 éléments dans le combo ? Vous devriez utiliser le Count propriété du Items collection. De cette façon, vous pouvez avoir n’importe quel nombre d’entrées et pouvez toujours garantir de trouver la dernière. Quant à colorier le dernier, jetez un oeil àClasse ComboBoxRenderer (System.Windows.Forms) | Microsoft Apprendre[^].

Solution 2

Cela dépend de ce que vous entendez par coloré et de la façon dont vous résoudriez ce problème (et je suppose que vous utilisez Windows Forms ici). Si vous souhaitez changer la couleur du premier plan, vous pouvez utiliser quelque chose comme ceci

C#
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{    
    e.DrawBackground();        
    ComboBox combobox = sender as ComboBox;

    string text = combobox.Items[e.Index].ToString();

    Brush brush;
    if (e.Index == combobox.Items.Length - 1) 
    {
        brush = Brushes.Red;
    }
    else
    {
        brush = Brushes.Black;
    }


    e.Graphics.DrawString(text, combobox.Font, brush, e.Bounds.X, e.Bounds.Y);
}

コメント

タイトルとURLをコピーしました