2012-02-09 5 views
5

J'ai une forme (voir capture d'écran):Visual Studio C# Windows Forms ... changer la couleur du bouton?

default form look

Comme vous pouvez le voir, sa forme assez basique, avec un bouton de sauvegarde. Je l'ai programmé de telle sorte que si l'un des champs de texte est modifié, le bouton "ENREGISTRER" change de couleur de sorte qu'il est évident que je n'ai pas cliqué sur Enregistrer et que je n'oublie pas. Malheureusement, il ne suffit pas de changer le BackColor du bouton en rouge, car c'est UGLY comme péché.

ugly backcolor unsaved

Que puis-je faire pour changer la couleur du bouton rouge, mais pas aussi laid. Comme vous pouvez le voir, le "BackColor" ne change pas le bouton entier, juste la pièce intérieure. La frontière est toujours la même vieille gris transparent façonné.

+0

Peut-être le forecolor (au lieu du backcolor) serait suffisant? – ken2k

+0

Le moyen le plus simple serait de convertir l'application en WPF, vous auriez un contrôle beaucoup plus grand. Comme c'est une bonne quantité de travail, vous devrez hériter du contrôle du bouton, et changer la façon dont le bouton est dessiné, si vous changez la valeur ** BackColor ** ne fait pas ce que vous voulez. –

+1

Personnellement, je garderais le bouton de sauvegarde désactivé jusqu'à ce que quelque chose ait changé. Activé sur les détails modifiés, puis désactivez-le à nouveau en cliquant sur. Juste une autre alternative :) –

Répondre

12

Un peu de LinearGradientBrush peut faire un long chemin pour adoucir la dureté d'un bouton rouge pur.

button1.ForeColor = Color.White; 

Bitmap bmp = new Bitmap(button1.Width, button1.Height); 
using (Graphics g = Graphics.FromImage(bmp)) { 
    Rectangle r = new Rectangle(0, 0, bmp.Width, bmp.Height); 
    using (LinearGradientBrush br = new LinearGradientBrush(
             r, 
             Color.Red, 
             Color.DarkRed, 
             LinearGradientMode.Vertical)) { 
     g.FillRectangle(br, r); 
    } 
    } 

alors vous pouvez simplement attribuer l'image à BackgroundImage propriété du bouton:

button1.BackgroundImage = bmp; 

Résultat:

enter image description here

Note: Attribution d'une image de fond perdre la coloration de vol stationnaire de la souris du bouton.

+0

Je me demande si vous pouvez utiliser la transparence sur BackgroundImage pour la fusionner avec le bouton d'origine. –

+0

Comment puis-je supprimer l'image d'arrière-plan? –

+0

@JasonAxelrod Juste un simple 'button1.BackgroundImage = null;' fonctionnerait. – LarsTech

1

Il existe de nombreux tutoriels en ligne sur la façon de créer de jolis boutons avec C#. Par exemple celui-ci vous permet de créer des boutons similaires à Vista. Jetez un coup d'oeil ici: http://www.codeproject.com/Articles/19318/Vista-Style-Button-in-C

Pour les couleurs de base, visitez cette question SO:

C#: Changing Button BackColor has no effect

+1

Le tutoriel a été retiré depuis: "Nous sommes désolés, mais l'article que vous essayez d'afficher a été supprimé le 18 mai 2013." ' – splungebob

-1

Cela ne fonctionnera pas dans WinForms, mais vous voudrez peut-être passer à WPF. C'est beaucoup plus pratique car vous pouvez configurer TOUT. (Même la couleur d'une barre de progression)

Editer: L'OP n'a pas besoin de réécrire entièrement son application. Il a juste besoin de refaire la mise en page de celui-ci, le code peut être C & P'd au nouveau projet WPF, FYI

Edit²: Vous ne même pas besoin d'utiliser le code pour changer la couleur d'un WPF bouton, vous pouvez simplement définir une superposition rouge avec 30% d'opacité dans le fichier XAML. C'est aussi simple que ça.

+1

Je suppose que ces downvotes proviennent de personnes qui n'ont jamais entendu parler de WPF. –

+3

Non, WPF est vraiment une excellente technologie. Mais comme OP utilise Winforms, la réponse "réécrire toute votre application, passer à WPF" est une très mauvaise réponse. – ken2k

+0

"Cela ne marchera pas" n'est pas une vraie réponse, je suppose. –

2

Une autre solution consisterait à ajouter un Icon (par exemple un point d'exclamation) au bouton à la place pour informer l'utilisateur que les modifications n'ont pas encore été enregistrées.

+0

Une autre solution serait d'avoir des sauvegardes automatiques. On pourrait aussi utiliser Ribbon ou ToolStrip. –

0

Vous pouvez simplement utiliser l'une des propriétés du bouton, "FlatStyle". Par défaut, c'est standard. Mais si vous basculez sur "Popup", votre couleur d'arrière-plan sera étendue à la zone du bouton. Vous pouvez comparer les suivants:

left-standard, right-popup

+0

bienvenue à SO! il est déconseillé de ressusciter les vieilles questions (2012!), en particulier celles qui ont accepté les réponses. – mzmm56

Questions connexes