none
WinForms: Von TextBox zu Textbox springend und nur Zahlen zulassen RRS feed

  • 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



    Mittwoch, 28. Dezember 2011 09:00

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
    Donnerstag, 29. Dezember 2011 10:52
    Moderator

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
    Donnerstag, 29. Dezember 2011 10:52
    Moderator
  • 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
    Donnerstag, 29. Dezember 2011 12:17
  • > 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".

    Freitag, 30. Dezember 2011 14:09
    Moderator
  • Vielen Dank für den kleinen Nachtrag.

    Ich will nicht meckern aber der Link funktioniert nicht :P

    Greetz

    Montag, 9. Januar 2012 07:28
  • 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".
    Montag, 9. Januar 2012 10:38
    Moderator