web-dev-qa-db-fra.com

C # WinForms - bordure personnalisée du bouton personnalisé lorsque le formulaire n'est pas sélectionné

Je rencontre un problème avec un bouton personnalisé que j'ai créé dans des formulaires c # win. Le bouton apparaît correctement lorsque le formulaire est sélectionné mais dès que je clique en dehors du formulaire, une bordure apparaît sur le bouton. Un bon exemple de cas où cela se produit est lorsque l'on clique sur le bureau mais que le formulaire est toujours agrandi pour que vous puissiez voir son contenu. Une image du problème peut être vue ci-dessous:

Button border problem

Cela ne se produit pas sur tous les boutons, uniquement lorsque le bouton a été cliqué au préalable (n'apparaît que sur un bouton à la fois). Cela m'a amené à croire que cela avait quelque chose à voir avec les repères de mise au point des boutons, mais ceux-ci sont définis sur faux. La bordure est définie sur 0 et le tabstop est également défini sur false.

Aucune suggestion?

38
Jpin

Lorsque vous avez affaire à un bouton personnalisé, vous devez définir:

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

Puisque ButtonBase ne prend pas en charge la couleur de la bordure sur Color.Transparent, vous pouvez résoudre le problème en définissant une couleur Argb:

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

la réponse de fuex peut supprimer la bordure en théorie, mais il y a un bogue selon lequel parfois le bouton aura toujours un repère de focus après avoir changé l'état d'activation du bouton.

(J'ai rencontré ce bogue dans .Net 4.0 et je ne sais pas si le bogue est corrigé ou non dans les versions ultérieures).

Pour contourner ce bogue, vous devez désactiver la propriété ShowFocusCues:

protected override bool ShowFocusCues
{
    get
    {
        // return base.ShowFocusCues;
        return false;
    }
}
3
FrankX