Benutzer mit den meisten Antworten
WinForms: Von TextBox zu Textbox springend und nur Zahlen zulassen

Frage
-
Hallo zusammen ich bin eines meiner Skripte am verbessern und da bin ich auf folgende Probleme gestossen:
- Ich möchte sobald eine Textbox mit 3 Zeichen befüllt ist, zur nächsten Textbox springen und diese "anklicken" (Focusen)
Mein Code sieht folgendermassen aus:
$TextBox1.Add_KeyPress({If($_.KeyChar -ne ([char]8) -and $TextBox1.Length -eq 3){$TextBox2.SetFocus}})
Es soll bei 3 Zeichen weiter gehen, jedoch bei Backspace nicht, damit man später die erste Textbox noch editieren kann.- Ausserdem möchte ich in einer Textbox nur Zahlen zulassen, was mir ebenfalls missfiel
$TextBoxIPAdresseIP.Add_KeyPress({switch -wildcard ($_.KeyChar) {"[0-9]" {}default{$_.Handled = $false}}})
Hier möchte ich, dass es die Zahlen 0-9 normal hineinschreibt, den Rest aber nicht behandelt.Ich wäre froh für ein bisschen Hilfe oder Denkanstösse :)
Ausserdem glaube ich, dass ich generell mühe mit Windows Forms habe, da ich manchmal nicht viel von den Codebeispielen (in VB) verstehe, so musste ich auch, nur um die Schriftart zu ändern 15 Minuten lang suchen, obwohl es im msdn ein Codebespiel gibt...
Grüsse aus der Schweiz
- Bearbeitet Powerturtle Mittwoch, 28. Dezember 2011 09:08
- Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 29. Dezember 2011 11:15 Titel angepasst
Antworten
-
Der Anfang war schon ganz gut. Du hast nur ein paar Fehler drin:
- $textbox.setfocus geht so nicht, Methoden brauchen kein "set" und haben am Ende Doppelklammern, auch wenn keine Parameter drin sind. Also heißt die Methode $textbox.focus(). Dummerweise funktioniert ausgerechnet diese Methode nur wenn diverse Bedingungen erfüllt sind. Besser und zuverlässiger ist es, über das Formobjekt das aktive Element festzulegen, in diesem Fall die Textbox: $Form1.ActiveControl = $textbox1 ("$Form1" = Name deines Formobjektes).
- $textbox.length gibt es nicht, da eine Textbox diese Eigenschaft nicht hat. Der Text einer Textbox aber schon, daher $textbox.text.length.
- um auf numerische Werte zu prüfen, reicht es den Input mit [0-9] zu vergleichen
- um einen Tastendruck zu unterdrücken, setzt du: $_.handled = $true
$Form1.ActiveControl = $TextBox1 $TextBox1.add_KeyPress({ If ($_.KeyChar -ne ([char]8) -and $TextBox1.Text.Length -eq 3) { $_.Handled = $true $Form1.ActiveControl = $TextBox2 } }) $TextBox2.Add_KeyPress({if ( $_.KeyChar -notlike "[0-9]") {$_.Handled = $true} })
Was das generelle Verständnis von WinForms betrifft, ist die Dokumentation insgesamt sher schwach. Ich hab vor einiger Zeit mal zwei Basic-Tutorials geschrieben (findest du über den Link in meiner Signatur), vielleicht hilft das noch etwas weiter.Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Als Antwort markiert Powerturtle Freitag, 30. Dezember 2011 07:35
Alle Antworten
-
Der Anfang war schon ganz gut. Du hast nur ein paar Fehler drin:
- $textbox.setfocus geht so nicht, Methoden brauchen kein "set" und haben am Ende Doppelklammern, auch wenn keine Parameter drin sind. Also heißt die Methode $textbox.focus(). Dummerweise funktioniert ausgerechnet diese Methode nur wenn diverse Bedingungen erfüllt sind. Besser und zuverlässiger ist es, über das Formobjekt das aktive Element festzulegen, in diesem Fall die Textbox: $Form1.ActiveControl = $textbox1 ("$Form1" = Name deines Formobjektes).
- $textbox.length gibt es nicht, da eine Textbox diese Eigenschaft nicht hat. Der Text einer Textbox aber schon, daher $textbox.text.length.
- um auf numerische Werte zu prüfen, reicht es den Input mit [0-9] zu vergleichen
- um einen Tastendruck zu unterdrücken, setzt du: $_.handled = $true
$Form1.ActiveControl = $TextBox1 $TextBox1.add_KeyPress({ If ($_.KeyChar -ne ([char]8) -and $TextBox1.Text.Length -eq 3) { $_.Handled = $true $Form1.ActiveControl = $TextBox2 } }) $TextBox2.Add_KeyPress({if ( $_.KeyChar -notlike "[0-9]") {$_.Handled = $true} })
Was das generelle Verständnis von WinForms betrifft, ist die Dokumentation insgesamt sher schwach. Ich hab vor einiger Zeit mal zwei Basic-Tutorials geschrieben (findest du über den Link in meiner Signatur), vielleicht hilft das noch etwas weiter.Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Als Antwort markiert Powerturtle Freitag, 30. Dezember 2011 07:35
-
Hallo Denniver
Vielen Vielen Dank.
Das hat mir einige mühsame Stunden erspart :)Also werden set_ und add_ nur bei Ereignissen gebraucht, wenn ich das richtig verstanden habe.
.Focus() ging bei mir noch nie (was müssen da wohl alles für Bedingungen erfüllt sein ^^)
Vielen Dank nochmals und Grüsse aus der Schweiz
- Bearbeitet Powerturtle Freitag, 30. Dezember 2011 07:35
-
> Focus() ging bei mir noch nie (was müssen da wohl alles für Bedingungen erfüllt sein
Ein paar Infos dazu stehen hier. Aber es lohnt nicht wirklich sich damit zu beschäftigen, die andere von mir genannte Methode geht immer.
> Also werden set_ und add_ nur bei Ereignissen gebraucht, wenn ich das richtig verstanden habe.
set_ brauchst du gar nicht.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Montag, 9. Januar 2012 10:37 Link gefixt
-
Gefixt. Danke für den Hinweis.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".