2016-12-06 11 views
0

Ich möchte Benutzern erlauben, eine Hintergrundfarbe für mein Programm mit einem ColorDialog auswählen, aber wie der Text meines Labels ist schwarz, ich möchte den Benutzer nicht in der Lage, schwarz aus dem Farbdialog auswählen damit die Farbe nicht meine Etiketttextfarbe überlappt. Kann ich das irgendwie? Ich habe auch eine Fehlermeldung von der Erziehung gedacht, wenn der Benutzer schwarz wählt, wie unten gezeigt, aber nach dem Farbdialog kommt wieder die Farbe, die ich ausgewählt nicht wird die Backcolor meiner FormDeaktivieren einer Farbe aus Farbdialog

if (color.ShowDialog() == DialogResult.OK) 
{ 
    if(color.Color == Color.Black) 
    { 
     MessageBox.Show("Color cannot be black", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
     color.ShowDialog(); 
    } 
    else 
    { 
     BackColor = color.Color; 
     backColor = color.Color; 
    } 
} 
+0

Klingt wie 'while', bis die richtige' Color' ausgewählt ist. – Sinatr

+2

Haben Sie darüber nachgedacht, zu einer hellen Textfarbe zu wechseln, wenn eine dunkle Hintergrundfarbe ausgewählt wurde, anstatt den Benutzern nur zu sagen, dass ihre Auswahl falsch ist? –

+1

Lassen Sie den Benutzer "BackColor" und "ForeColor" für das Formular auswählen. Auf diese Weise können sie wählen, welche Farbkombination sie wünschen. –

Antwort

0

Versuch zu verwenden, während stattdessen von wenn, wenn für die Farbprüfung:

if (color.ShowDialog() == DialogResult.OK) 
{ 
    while(color.Color == Color.Black) 
    { 
     MessageBox.Show("Color cannot be black", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
     color.ShowDialog(); 
    } 
    BackColor = color.Color; 
    backColor = color.Color; 
} 

Auf diese Weise, wenn Sie eine Farbe auswählen, die nicht schwarz ist, wird es eine Fehlermeldung und den Colordialog wieder öffnen. Warum die Farbe sich nach dem erneuten Öffnen des Dialogs nicht ändern würde, liegt daran, dass Sie die Hintergrundfarbe nur in der else-Klausel ändern. Wenn Sie also zuerst schwarz auswählten, änderte sich die BackColor nicht. Eine weitere Möglichkeit, Ihr Problem zu lösen, besteht darin, die Farbe Ihrer Etiketten in Weiß zu ändern, wenn die gewählte Farbe schwarz ist (vergessen Sie nicht, den Beschriftungstext wieder in Schwarz zu ändern, wenn eine andere Farbe gewählt wird).

+0

danke Jungs. Die While-Schleife hat für mich funktioniert. Ich kann die Etikettfarbe nicht ändern, weil ich viele Formen habe und viel Zeit sprechen würde –

+0

@LimJunWei 'ForeColor' und' BackColor' sind Umgebungseigenschaften und wenn Sie sie in der Basisform ändern, werden sie für alle Kontrollen ändern. –

+1

Sie sollten wahrscheinlich überprüfen, ob der Benutzer beim zweiten ShowDialog-Anruf die Schaltfläche Abbrechen drückt. – LarsTech

Verwandte Themen