2012-05-13 11 views
33

Ich experimentierte mit verschiedenen Optionen für die Hintergrundfarbe der Schaltfläche und änderte schließlich die Eigenschaft BackColor in der Kategorie Aussehen. Habe ich es dann zurück zu dem, was es ist standardmäßig die Control ist, aber es sieht immer noch anders als die anderen Tasten:Zurücksetzen auf die Standardschaltfläche BackColor?

Screenshot of buttons

Ich habe versucht, das Projekt zu bauen und Visual Studio neu zu starten, aber es hat nicht geholfen .

Ich weiß, ich kann nur eine andere Taste ziehen und Code kopieren/einfügen, aber was verursacht das an erster Stelle und wie kann ich es richtig beheben?

+0

Wenn im Entwurfsmodus geändert dann gehen Sie einfach auf [zurück color] Eigenschaft (im Entwurfsmodus) und klicken Sie rechts. Sie erhalten ein Menü, das auf die Standardeinstellungen zurückgesetzt wird. –

Antwort

54

Die Eigenschaft BackColor ist standardmäßig eine Ambient-Eigenschaft, was bedeutet, dass sie ihren Wert vom übergeordneten Steuerelement übernimmt. Wenn Sie explizit auf auf einen bestimmten Wert festlegen, setzt dies die Umgebungsnatur außer Kraft und zwingt sie, diesen bestimmten Wert zu verwenden.

Das standardmäßige Windows-Schaltflächensteuerelement unterstützt keine benutzerdefinierten Farben, daher zeichnet WinForms das Steuerelement tatsächlich benutzerdefiniert, damit der Designer seine Farbe überschreiben kann. Auf diese Weise, wenn Sie eine hässliche grüne oder rote Taste haben möchten, können Sie das tun.

Was ist hier passiert ist, haben Sie effektiv eine benutzerdefinierte Hintergrundfarbe für die Schaltfläche Steuerelement festgelegt (Sie legte es auf die Hintergrundfarbe eines 3D-Steuerelement, aber es könnte genauso leicht lila gewesen sein), und das hat WinForms gezwungen Zeichnen Sie das Steuerelement und malen Sie den Hintergrund mit der angegebenen Farbe. Dadurch erhält es eine "flache" Erscheinung - die Hintergrundfarbe wird jetzt mit einer einzigen benutzerdefinierten Farbe dargestellt, anstatt den Standard-Verlaufseffekt zu verwenden. Unter dem Windows Classic (Pre-Aero) -Thema wäre es nicht so auffällig gewesen, denn die Buttons wurden mit der flachen 3D-Kontrollfarbe bemalt. Aber Aero fügte Farbverläufe und andere "heiße" Effekte hinzu, was diesen Stab wie einen wunden Daumen ausmacht.

Um den Wert, den Sie festgelegt haben, zu löschen und die Umgebungseigenschaft der Eigenschaft wiederherzustellen, können Sie mit der rechten Maustaste auf die Eigenschaft im Eigenschaftenfenster klicken und "Zurücksetzen" auswählen. Sie können es auch tun, durch den Code durch die Eigenschaft default(Color) Einstellung:

myButton.BackColor = default(Color); 

Sie müssen auch zurück zu true die UseVisualStyleBackColor Eigenschaft, die false automatisch eingestellt wird, wenn die BackColor Eigenschaft geändert wird, um die Gewohnheit zu unterstützen Hintergrundfarbe.

Alternativ können Sie WinForms anweisen, benutzerdefinierte Eigenschaften wie diese insgesamt zu ignorieren und Windows zu bitten, das Schaltflächensteuerelement zu zeichnen. Tun Sie dies, indem Sie die Eigenschaft FlatStyle auf FlatStyle.System setzen.

Auch dies kann entweder im Designer oder durch Code erfolgen. Dies verhindert nicht nur, dass Sie dumme Dinge wie die Hintergrundfarbe ändern, sondern auch ein fürchterlich hässliches Steuerelement, aber es stellt auch das native Verhalten des Win32-Schaltflächensteuerelements für Ihre WinForms-Anwendung wieder her, einschließlich der subtilen Aero-Fade-Effekte bei Hover.

Ich habe keine Ahnung, warum dies nicht der Standard war. Sie sollten eine spezielle Anfrage stellen, um hässliche und nicht standardmäßige Steuerelemente zu erhalten. Das sollte nicht automatisch passieren. Ich kann nur annehmen, dass es ein Zugeständnis an VB 6-Programmierer war, die jahrelang alle möglichen hässlichen Kontrollen durchführen konnten.

+1

Was ist die entsprechende VB.NET-Version von * default (Color) *? –

+1

@PeterMortensen: 'Neue Farbe()' arbeitete für mich. – Neolisk

+0

FlatStyle ist großartig. – Vlad

10

Wenn Sie die standardmäßige Hintergrundfarbe ändern, wird die Eigenschaft UseVisualStyleBackColor auf false umgestellt.

Ändern Sie einfach das zurück auf wahr und Sie sollten eingestellt werden!

0

Mit Bezug auf Ihre Frage Titel, "Wie auf Standard-Schaltfläche BackColor zurückgesetzt?", löste ich mein Problem:

eine andere Taste erstellen, sagen ButtonFoo, und es unsichtbar gesetzt,

ButtonFoo.visible = False 

und Sie mit dieser Taste kann seine Farbe zu erhalten (da es sich um eine Standardfarbe ist) B.

ButtonChangedColor.BackColor = ButtonFoo.BackColor 

Dort gehen Sie; Farbe wird auf den Standard zurückgesetzt :)

7

Um die Standardhintergrundfarbe der Schaltfläche wiederherzustellen, verwenden Sie;

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

Was für mich gearbeitet:

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

Verwenden Sie das FromKnowColor die Systemfarben zuzugreifen. Es ist wirklich so einfach.

0

Um den Standard-Hintergrund und Vordergrund auf eine Schaltfläche Verwendung wiederherzustellen:

Button1.BackColor = SystemColors.ButtonFace; 
Button1.ForeColor = default(Color); 
Button1.UseVisualStyleBackColor = true; 
Verwandte Themen