2012-02-22 61 views
31

Tengo un problema con un botón personalizado que he creado en formularios C# win .. El botón aparece bien cuando se selecciona el formulario, pero tan pronto como hago clic fuera del formar un borde aparece en el botón. Un buen ejemplo de cuándo sucede esto es cuando se hace clic en el escritorio, pero el formulario aún se maximiza para que pueda ver su contenido. Una imagen del problema puede verse a continuación:C# WinForms - botón personalizado borde no deseado cuando no se seleccionó el formulario

Button border problem

Esto no sucede en todos los botones, sólo cuando el botón se ha hecho clic antes (sólo aparece en un botón a la vez). Esto me llevó a creer que se trataba de algo relacionado con las teclas de enfoque del botón, pero están configuradas como falsas. El borde está establecido en 0 y también tengo tabstop establecido en falso.

¿Alguna sugerencia?

+2

Metro? WinForms? WPF? Silverlight? ¿Telefono windows? ASP.Net? MonoTouch? – SLaks

+0

disculpas, C# win forms – Jpin

Respuesta

75

Cuando usted está tratando con un botón personalizado debe establecer:

button.TabStop = false; 
button.FlatStyle = FlatStyle.Flat; 
button.FlatAppearance.BorderSize = 0; 

Entonces ya ButtonBase no admite el color del borde de Color.Transparent, puede superar el problema estableciendo un color argb:

button.FlatAppearance.BorderColor = Color.FromArgb(0, 255, 255, 255); //transparent 
+0

Gracias por la respuesta, ya tengo estos establecidos como usted indicó – Jpin

+1

Esto funcionó: myButton.FlatAppearance.BorderColor = Color.FromArgb (0, 255, 255, 255); ¡Muchas gracias! – Jpin

+0

Gracias, también tuve un problema similar. ¡Esta respuesta lo solucionó! –

2

La respuesta de fuex puede eliminar la frontera en teoría, pero hay un error que a veces el botón todavía tendrá señal de enfoque después de cambiar el estado de activación del botón (me encontré con este error en .NET 4.0 y no sé el el error está arreglado o no en la versión posterior) . Para solucionar este error, debe desactivar focuscue propoerty

protected override bool ShowFocusCues 
    { 
     get 
     { 
      //return base.ShowFocusCues; 
      return false; 
     } 
    } 
Cuestiones relacionadas