2016-10-24 4 views
1

Ich habe ein CustomControl, das von einem Button abgeleitet ist. An bestimmten Punkten in der Lebensdauer dieses Steuerelements möchte ich den Hintergrund auf eine spezielle Farbe (z. B. Pflaume) oder eine normale Steuerfarbe einstellen (das entspricht der Standardfarbe für andere Tasten). Hier ist der relevante Code, der meistens funktioniert.Hintergrund/Rahmen einer Schaltfläche abgeleitet CustomControl

public partial class MySpecialButton : Button 
{ 
    private void SetButtonState() 
    { 
     if (isSpecial && Enabled) 
     { 
      BackColor = Color.Plum; 
     } 
     else 
     { 
      BackColor = Enabled ? SystemColors.Control : SystemColors.ControlDark; 
     } 
    } 
} 

Dies hat mehrere Probleme:

  1. Wenn meine Kontrolle aktiviert ist und nicht in Spezialmodus, wobei die Steuer Farbe, die auf die Taste mit scheint zu hell im Vergleich zu anderen Tasten gezogen wird. Sie können dies in der folgenden Abbildung sehen, wo die "Create Default" -Schaltfläche eine normale Schaltfläche mit der Standardfarbe ist und die "Read From Device" -Schaltfläche meine spezielle Schaltfläche mit der auf SystemColors.Control eingestellten Hintergrundfarbe ist. Warum sind die zwei Farben unterschiedlich?

  2. Wenn mein Steuerelement mit einer Hintergrundfarbe mit dem obigen Code gezeichnet wird, scheint es einen Rand um die Schaltfläche, die ich nicht will. Zum Beispiel hat der "Read From Device" -Button im obigen Bild eine ziemlich dicke Umrandung von etwas, das wie eine Kontrollfarbe aussieht.

  3. Wenn mein Steuerelement mit dem zugrunde liegenden Button.Enabled = false gezeichnet wird, hat die Farbe nicht die gleiche Farbe wie die Standardfarbe für deaktivierte Schaltflächen. Sie können das im Bild unten sehen. Die Farbe des Steuerelements "Write To Device" ist zu dunkel im Vergleich zu der Schaltfläche "Save To Computer", beide mit Enabled = false. Depiction of different disabled colors

  4. Das deaktivierte Steuerelement hat die falsche Vordergrundtextfarbe. Wie kann ich den Mechanismus der Basisklasse nutzen, um den Text/background/border/etc richtig zu zeichnen?

Antwort

1

Betrachten Sie diese Hinweise:

  1. eine BackColor Eigenschaft eines Button Ursache Einstellung UseVisualStyleBackColor zu false und die Differenz einstellen, die Sie zwischen einer normalen Taste und Ihre benutzerdefinierte Schaltfläche, weil dieser ist. Um das Problem zu lösen, sollten Sie UseVisualStyleBackColor nach dem Zurücksetzen von BackColor auf SystemColors.Control wieder auf true setzen.

  2. Wenn Sie nicht wie die Grenze, welche die Taste selbst bemalen oder FlatStyle Satz Flat verwenden und FlatAppearance.BorderSize = 0 oder jede andere Erscheinung und Rand-Größe, die Sie bevorzugen.

  3. Das gleiche wie die Nummer eins.

  4. Die Vordergrundfarbe eines deaktivierten Button wird basierend auf der Hintergrundfarbe berechnet. Wenn Sie also die Hintergrundfarbe wie in Nummer 1 beschrieben zurücksetzen, sehen Sie keinen Unterschied.

Verwandte Themen