2011-11-21 25 views
16

Tengo un botón en un formulario de Windows Forms para el que cambio el color de fondo a Color.Yellow cuando se hace clic en él. Cuando vuelva a hacer clic, quiero restaurarlo a la apariencia predeterminada original.Restore C# Windows Forms backcolor

El color de fondo predeterminado es SystemColor.Control.

Cuando se hace clic en el botón de la primera vez que lo único que cambiaría es la

btn.Text = "ABC"; 
btn.BackColor = Color.Yellow; 

Cuando se hace clic una vez más debo hacer

btn.BackColor = SystemColors.Control 

El nuevo fondo no tiene el mismo sombreado ya que originalmente lo hizo antes de cualquier clic. Originalmente, el botón tenía un fondo que no era un color sólido, sino dos tonos de gris ligeramente diferentes. El color final termina siendo un tono sólido de gris.

Estoy probando esto en una máquina con Windows 7.

Captura de pantalla:

Enter image description here

+1

Se puede publicar una captura de pantalla? Además, ¿en qué versión del sistema operativo se está ejecutando? –

+4

Cuanto más esfuerzo haga en sus preguntas, mejores serán las respuestas que obtendrá, incluidas las capturas de pantalla del problema. – Nasreddine

+0

Relacionado: * [¿Cómo restablecer el botón predeterminado BackColor?] (Http://stackoverflow.com/questions/10569200) * –

Respuesta

22

Prueba esto:

if (button1.BackColor == Color.Yellow) 
{ 
    button1.BackColor = SystemColors.Control; 
    button1.UseVisualStyleBackColor = true; 
} 
else 
{ 
    button1.BackColor = Color.Yellow; 
} 
+0

Bingo, que funcionó gracias – JonF

+0

+1 Buena captura No estaba al tanto de ese método –

1

Trate de usar btn.ResetBackColor() en lugar de establecer manualmente el BackColor.

+1

Esa función no existe en el botón winform (al menos en un winform .net 3.5) – JonF

+1

En realidad existe, simplemente no aparece en intellisense porque está marcado como [EditorBrowsable (EditorBrowsableState.Never)] –

+1

@JonF según [MSDN] (http://msdn.microsoft.com/en-us/library /system.windows.forms.control.resetbackcolor.aspx) existe, ya que .Net 1.0 – Nasreddine

11

También debe establecer UseVisualStyleBackColor en verdadero. Esta propiedad se establece en falso cuando cambia el color de fondo.

+2

+1. Esto es exactamente lo que necesita para resolver su problema. –

1

Esto restaurará el aspecto por defecto (probado en Windows 7, .net 3.5):

btn.BackColor = System.Drawing.Color.Transparent;