Aquí podría ser tu PUBLICIDAD


¿Cómo hacer que un control se vea como ComboBox con estilos visuales habilitados?

votos
28

Tengo un control que está modelado en un ComboBox . Quiero renderizar el control para que el borde de control se vea como el de un ComboBox estándar de Windows . Específicamente, he seguido la documentación de MSDN y todo el renderizado del control es correcto, excepto para el renderizado cuando el control está deshabilitado.

Para que quede claro, esto es para un sistema con Estilos visuales habilitados. Además, todas las partes del control se procesan correctamente, excepto el borde alrededor de un control desactivado, que no coincide con el color de borde del ComboBox desactivado .

Estoy usando la clase VisualStyleRenderer . MSDN sugiere usar el VisualStyleElement.TextBoxelemento para la parte de TextBox del control ComboBox , pero un TextBox deshabilitado estándar y un ComboBox deshabilitado estándar dibujan de forma ligeramente diferente (uno tiene un borde gris claro, el otro un borde azul claro).

¿Cómo puedo obtener una representación correcta del control en un estado deshabilitado?

Publicado el 05/08/2008 a las 22:19
fuente por usuario Peter Hession
En otros idiomas...        العربية       

2 respuestas

votos
8

No estoy 100% seguro de que esto es lo que estás buscando, pero deberías echarle un vistazo al VisualStyleRenderer en el espacio de nombres System.Windows.Forms.VisualStyles.

  1. Clase VisualStyleRenderer (MSDN)
  2. Cómo: Renderizar un Elemento de Estilo Visual (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

Como VisualStyleRenderer no funcionará si el usuario no tiene habilitados los estilos visuales (es posible que ejecute el "modo clásico" o un sistema operativo anterior a Windows XP), siempre debe tener una alternativa a la clase ControlPaint.

// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS 
    && VisualStyleInformation.IsEnabledByUser) 
{
    renderer = new VisualStyleRenderer(
        VisualStyleElement.ComboBox.DropDownButton.Disabled);
}

y luego hazlo así al dibujar:

if(renderer != null)
{
    // Use visual style renderer.
}
else
{
    // Use ControlPaint renderer.
}

¡Espero eso ayude!

Respondida el 16/08/2008 a las 10:28
fuente por usuario Patrik Svensson


Aquí podría ser tu PUBLICIDAD


votos
1

¿Son útiles algunos de los métodos de ControlPaint para esto? Eso es lo que suelo usar para los controles personalizados.

Respondida el 16/08/2008 a las 08:58
fuente por usuario Nick