Hallo zusammen,
erst einmal wünsche ich allen ein gesundes neues Jahr.
Ich habe für die meisten wahrscheinlich nur ein kleines Problem.
Ich habe eine Form, auf der 3 Textfelder und 2 Button sind.
Einer dieser Button (der Ok-Button) soll allerdings nur dann benutzbar sein, wenn diese 3 Felder ausgefüllt sind. Allerdings will ich diesen Zustand nicht immer dann abfragen, wenn eine Eingabe in den Textfeldern erfolgt sondern irgenwie dauerhaft und kontinuierlich.
Also cmd_ok.enabled = textfeld.text<>""; so als Pseudo
Habt ihr da ne lsg oder evt nen Link dazu?
LG JJPhoenix
Hallo JJPhoenix,
ändere den Enabled-Status des Buttons im TextChanged-EventHandler der TextBox.
herbivore
Na aber das muss ich dann in jedem Textfeld machen, oder wie sehe ich das?
Wollte irgendwie ne Routine haben, die das kontinuierlich prüft, oder geht das nicht so ohne Weiteres?
LG
Ja, das musst jedem Textfeld diesen EventHandler für den TextChanged Event zuweisen.
Das ist imho auch die sauberste Lösung.
Alternativ kannst du ja einen http://msdn.microsoft.com/de-de/library/system.windows.forms.timer(VS.80).aspxTimer verwenden, der periodisch prüft. Halte ich aber für suboptimal.
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
YARRRRRR!
Na aber das muss ich dann in jedem Textfeld machen, oder wie sehe ich das? rein prinzipiell ja, sonst macht es ja wohl kaum Sinn 😉
Wollte irgendwie ne Routine haben, die das kontinuierlich prüft, ...
LG
Das macht die von herbivore vorgeschlagene Methode ja...
Zur Vereinfachung abonnierst du alle drei Textboxen auf das GLEICHE TextChangedEvent und dort machst du die Überprüfung:
private void textBoxText_Changed(...) {
...
cmd_ok.Enabled = (textBox1.Text <>"") && (textBox2.Text <>"") && (textBox3.Text <>"")
...
}
Gruss Rainer
private void textBoxText_Changed(...) { ... cmd_ok.Enabled = (textBox1.Text <>"") && (textBox2.Text <>"") && (textBox3.Text <>"") ... }
Sauberste Lösung:
/* ... snip ... */
private void textBoxText_Changed(object sender, EventArgs e)
{
cmd_ok.Enabled = !(String.IsNullOrEmpty(textBox1.Text) || String.IsNullOrEmpty(textBox2.Text) || String.IsNullOrEmpty(textBox3.Text));
}
Das <> verbitte ich mir! Jawohl!
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
YARRRRRR!
@GLMOD
.Text einer TextBox kann nie null sein (falls intern null wird ein string.empty zurückgegeben)
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Die Methode heisst ja auch: IsNullOrEmpty.
"" tut mir persönlich in den Augen weh. Zumindest sollte man gegen String.Empty checken.
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
YARRRRRR!
So ist natürlich noch schicker, danke dafür!
PS das "<>" war nur Pseudo, stand ja auch da, werde es denke als bald nicht mehr verwenden....
Aber Leerzeichen überprüft "IsNullOrEmpty" net oder ?
weil mit ".trim" will das net so funzen
LG
Hallo JJPhoenix,
Aber Leerzeichen überprüft "IsNullOrEmpty" net oder ?
nein, nur das was der Name sagt, also (komplett) Leer.
weil mit ".trim" will das net so funzen
Mit ((TextBox)sender).Text.Trim () != ""
sollte es problemlos gehen.
herbivore
@GLMOD
Meine Bemerkung war ja auch keine Kritik 😃 sondern nur ein Hinweis dass man durch den Wegfall der Prüfung auf Null mehrere Wege offen hat.
.Text==string.Empty
.Text.Trim()string.Empty
.Text.TrimStart('0')string.Empty (z.B: bei numerischen Feldern wenn eine 0 keine Eingabe ist)...
.Text""
.Text.Length0
usw.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Auf Leerzeichen überprüft == auch nicht, das ist beim String quasi ein Synonym für die Equals Methode.
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
YARRRRRR!
Sauberste Lösung:
cmd_ok.Enabled = !(String.IsNullOrEmpty(textBox1.Text) || String.IsNullOrEmpty(textBox2.Text) || String.IsNullOrEmpty(textBox3.Text));
Oder noch einfacher:
cmd_ok.Enabled = !((TextBox)sender).Length == 0;
@C#
Er will den button erst aktiv haben wenn in ALLEN Textboxen was drin ist.
Daher ist Dein Tipp leider nicht korrekt.
Gruss
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
.Trim() ich depp hatte die () vergessen. Aus dem php kannte ich das bisher eher so trim(text) und net andersherum a la text.trim() ;-P
cmd_insert.Enabled = !(String.IsNullOrEmpty(txt_c01.Text.Trim()) || String.IsNullOrEmpty(txt_c02.Text.Trim()) || String.IsNullOrEmpty(txt_c03.Text.Trim()));
OK THX a lot!
LG
Kann dann als gelöst markiert werden
@Programmierhans
Stimmt, es müsste
if (((TextBox)sender).Text.Trim().Length == 0) cmd_ok.Enabled = false;
heissen. Dann ist der Unterschied aber nicht mehr so gross.
Das funktioniert nicht.
Der Button ist nämlich disabled und soll enabled werden. Der wird sich nicht auf wundersame Weise plötzlich von alleine enablen.
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
YARRRRRR!
Also ich würd es so machen (sofern sich die Controls direkt auf demselben Container befinden).
private void AnyTextBox_TextChanged(object sender, EventArgs e)
{
bool allFilled = true;
foreach (Control c in this.Controls)
{
if (c is TextBox && c.Text.Trim().Length == 0)
{
allFilled = false;
break;
}
}
this.button1.Enabled = allFilled;
}
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...