2012-05-13 15 views
33

Estaba experimentando con diferentes opciones para el color de fondo del botón y terminé cambiando la propiedad BackColor en la categoría Apariencia. Entonces cambié de nuevo a lo que está por defecto que es Control, pero todavía se ve diferente de los otros botones:Cómo restablecer el botón predeterminado BackColor?

Screenshot of buttons

que he intentado construir el proyecto y reiniciar Visual Studio, pero no sirvió de nada .

Sé que puedo simplemente arrastrar otro botón y copiar/pegar código, pero ¿qué causa esto en primer lugar y cómo lo corrijo correctamente?

+0

Si cambió en modo de diseño a continuación, sólo tiene que ir a [COLOR] propiedad (en modo de diseño) y haga clic derecho. Obtendrá un menú para volver a la configuración predeterminada. –

Respuesta

54

La propiedad BackColor es una propiedad ambiental por defecto, lo que significa que hereda su valor de su control principal. Cuando lo configura explícitamente a un valor particular, eso anula la naturaleza ambiental y lo fuerza a usar ese valor particular.

El control de botón de Windows estándar no admite colores personalizados, por lo que WinForms realmente dibujará el control para permitir que el diseñador anule su color. De esa manera, si quieres tener un feo botón verde o rojo, puedes hacerlo.

Lo que sucedió aquí es que has establecido efectivamente un color de fondo personalizado para el control del botón (lo configuraste en el color de fondo de un control 3D, pero igual podría haber sido morado), y eso obliga a WinForms a Custom dibuja el control y pinta su fondo con el color especificado. Eso es lo que le da la apariencia "plana": el color de fondo ahora está pintado con un único color personalizado, en lugar de usar el efecto de degradado predeterminado. No habría sido tan notable en el tema Windows Classic (pre-Aero), porque los botones en realidad fueron pintados con el color plano de control 3D. Pero Aero agregó gradientes y otros efectos "calientes", lo que hace que esto sobresalga como un pulgar dolorido.

Para borrar el valor que ha establecido y restablecer la naturaleza ambiental de la propiedad, puede hacer clic derecho en la propiedad en la Ventana de Propiedades y seleccionar "Restablecer". También puede hacerlo a través de código mediante el establecimiento de la propiedad a default(Color):

myButton.BackColor = default(Color); 

También tendrá que establecer la propiedad UseVisualStyleBackColor de nuevo a true, que consigue ajusta automáticamente a false siempre que los bienes BackColor se cambia para apoyar la costumbre color de fondo.

Como alternativa, puede indicarle a WinForms que ignore por completo las propiedades personalizadas y pida a Windows que dibuje el botón de control. Para ello, establezca la propiedad FlatStyle en FlatStyle.System.

Nuevamente, esto puede hacerse en el diseñador o mediante el código. Esto no solo le impedirá alterar cosas tontas como el color de fondo, creando un control terriblemente desagradable, sino que también restaurará el comportamiento nativo del control del botón Win32 a su aplicación WinForms, incluidos los sutiles efectos de desvanecimiento de Aero en el vuelo estacionario.

No tengo idea de por qué este no era el valor predeterminado. Debería tener que hacer una solicitud especial para obtener controles desagradables y no estándar. Eso no debería suceder solo automáticamente. Solo puedo suponer que fue una concesión para los programadores de VB 6, que han podido hacer todo tipo de controles desagradables durante años.

+1

¿Cuál es la versión VB.NET correspondiente de * default (Color) *? –

+1

@PeterMortensen: 'New Color()' funcionó para mí. – Neolisk

+0

FlatStyle es genial. – Vlad

10

Cuando cambia el color de fondo predeterminado, invierte la propiedad UseVisualStyleBackColor a falso.

¡Solo vuelve a cambiar eso y deberías configurarlo!

0

En referencia al título de su pregunta, "¿Cómo restablecer el botón predeterminado BackColor?", he resuelto mi problema por:

Crear otro botón, por ejemplo ButtonFoo, y la puso a invisible,

ButtonFoo.visible = False 

y se puede utilizar este botón para obtener su color (ya que es un color predeterminado) para restablecer otro color de botón, por ejemplo,

ButtonChangedColor.BackColor = ButtonFoo.BackColor 

Ahi lo tienes; el color se restablece a su valor predeterminado :)

7

Para restablecer el color de fondo predeterminado del botón, use;

Button1.BackColor = SystemColors.ButtonFace 
Button1.UseVisualStyleBackColor = True 
3

Lo que funcionó para mí:

CommandButton1.BackColor = vbButtonFace 
2
Button1.BackColor = Color.FromKnownColor(KnownColor.Control) 

Uso del FromKnowColor para acceder a los colores del sistema. Es así de simple.

0

Para restaurar el fondo y el primer plano por defecto a un uso botón:

Button1.BackColor = SystemColors.ButtonFace; 
Button1.ForeColor = default(Color); 
Button1.UseVisualStyleBackColor = true; 
Cuestiones relacionadas