.net - una - lista desplegable con sugerencias de búsqueda excel
Cómo cambiar el color de fondo del cuadro combinado(no solo la parte de la lista desplegable) (4)
Como de todos modos pierde los efectos 3D con la solución de Igby Largeman, es mejor que cambie la propiedad FlatStyle
a Flat
. El color de fondo parece ser obedecido incluso en Windows 7 de esa manera, y sin volver a implementar ningún evento de bajo nivel.
Yo consideraría esto un error por parte de Microsoft ...
En una aplicación winform que se ejecuta en Windows 7, quiero cambiar el color de fondo de un cuadro combinado para resaltarlo. El comboxbox tiene un DropDownStyle de DropDownList.
Cuando cambio la propiedad BackColor mediante programación a Rojo, solo el fondo de la lista desplegable real cambia a Rojo. Cuando la lista desplegable no está abierta, el fondo del cuadro combinado que muestra el valor seleccionado permanece en gris. ¿Qué puedo hacer para que se vuelva rojo también?
La configuración de la propiedad BackColor funciona bien cuando la aplicación se ejecuta en Windows XP
Esto debería empezar.
Cambie la propiedad DrawMode de combobox a OwnerDrawFixed y maneje el evento DrawItem:
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
int index = e.Index >= 0 ? e.Index : 0;
var brush = Brushes.Black;
e.DrawBackground();
e.Graphics.DrawString(comboBox1.Items[index].ToString(), e.Font, brush, e.Bounds, StringFormat.GenericDefault);
e.DrawFocusRectangle();
}
El color de fondo será el correcto, pero el estilo de la caja será plano, no el estilo 3D habitual.
Jugué un poco con esto por un tiempo y no quería hacer nada demasiado involucrado. Esas ideas anteriores probablemente funcionen, pero todo lo que hice fue cambiar la propiedad flatStyle de "estándar" a "plana".
Aunque no es perfecto, al menos cambia el fondo que se ve gris / deshabilitado a blanco.
Puedes ver la comparación aquí:
Fuente de calefacción # 1> Lista desplegable> plana (la decisión final desde la lista desplegable fue permitir a los usuarios ingresar datos incorrectos)
Fuente del calentador # 2> Menú desplegable> Estándar (el valor predeterminado que se ve bien)
Tipo de vivienda> desplegable> plana
Proveedor de fuente de calefacción # 1> Lista desplegable> Estándar (el valor predeterminado es gris desactivado)
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
var cmb = (ComboBox) sender;
if (cmb == null) return;
if (e.Index % 2 == 0)
{
e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds);
e.Graphics.DrawString(cmb.Items[e.Index].ToString(), cmb.Font, SystemBrushes.GrayText, e.Bounds);
}
else
{
e.DrawBackground();
// change background color
e.Graphics.FillRectangle(Brushes.AntiqueWhite, e.Bounds);
// change foreground color
Brush brush = ((e.State & DrawItemState.Selected) > 0) ? SystemBrushes.HighlightText : SystemBrushes.ControlText;
e.Graphics.DrawString(cmb.Items[e.Index].ToString(), cmb.Font, brush, e.Bounds);
e.DrawFocusRectangle();
}
}