¿Se puede colorear el último elemento del menú desplegable?

programación


Hola a todos,

¿Se puede resaltar con color el último elemento de un menú desplegable combinado?
La necesidad es resaltar el último elemento en un cuadro combinado (o cuadro de lista si eso es más fácil…)

Lo que he probado:

Para llenar el cuadro:

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

para obtener el último artículo en la caja

C#
cboTest.SelectedIndex = 9;

pero eso significa que tienes que saber el tamaño, así que si es variable, ¿puedes hacerlo?

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

¿Obtendrá GetUpperBound(0) el primer elemento que supongo que no existe GetLowerBound(), como cboTest.GetLowerBound()?

Solución 1

¿Cómo puedes estar seguro de que hay 10 elementos en el combo? Deberías usar el Count propiedad de la Items recopilación. De esa manera, puede tener cualquier cantidad de entradas y siempre puede garantizar que encontrará la última. En cuanto a colorear el último, echa un vistazo aClase ComboBoxRenderer (System.Windows.Forms) | Microsoft aprende[^].

Solución 2

Depende de lo que quieras decir con color en cuanto a cómo resolverías esto (y supongo que estás usando Windows Forms aquí). Si quisieras cambiar el color de primer plano, podrías usar algo como esto

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をコピーしました