none
Automatisch in die nächste Textbox springen RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte von einer Textbox automatisch in die nächste springen wenn 8 Zeichen erreicht sind, dazu habe ich folgenden Code:

    $objTextBox = New-Object System.Windows.Forms.TextBox
    $objTextBox.Location = New-Object System.Drawing.Size(10,40)
    $objTextBox.Size = New-Object System.Drawing.Size(260,20)
    $objTextBox.TabIndex=0
    $objTextBox.MaxLength=6
    $objTextBox.Add_KeyPress({if ($_.KeyChar -match "[x]") {$objTextBox.MaxLength=8 }})
    $objTextBox.Add_KeyDown({if($objTextBox.Text.Length -eq 8) {

                  
                   $a = get-mailbox -id $objTextBox.Text
                   if($a.UseDatabaseQuotaDefaults -eq $true) {
                       $b =  get-mailboxdatabase $a.Database
                       $objTextBox1.Text = $b.IssueWarningQuota
                       $objTextBox1.ReadOnly = $false
                        }
                        $objForm.ActiveControl = $objTextBox1
                       }})
                       
                        
     $objForm.Controls.Add($objTextBox)

    leider springt er erst dann in die nächste Textbox wenn ich nach den 8 Zeichen noch die Leertaste drücke, sozusagen als Impuls.

    Ich habe es auch schon mit -gt 7 versucht, damit das 8 Zeichen den Impuls gibt, klappt leider nicht. Wenn ich nur -eq 7 mache springt er zwar nach dem 8 Zeichen in das Textfeld, kann dann aber den Rest nicht mehr, da es sich hier um Userkennungen handelt und nur 7 Zeichen zurückgegeben werden.

    Hat jemand noch eine Idee?

    Danke und Gruß

    Uwe

    Mittwoch, 1. August 2012 07:09

Antworten

  • Wenn du möchtest, das nach dem Drücken des achten Zeichens weitergesprungen wird, musst du ein anderes Event benutzen. Und zwar eines das nach dem Tastendruck prüft ob nun 8 Zeichen in der Box sind: KeyUP.  (KeyDown wird hingegen während des Tastendrucks ausgelöst)

    Hier ist ein Beispiel:

    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
    
    
    $Form1 = New-Object System.Windows.Forms.Form
    $Form1.ClientSize = "370, 73"
    
    
    $TextBox1 = New-Object System.Windows.Forms.TextBox
    $TextBox1.Location = "23, 26"
    $TextBox1.Size = "138, 20"
    
    $TextBox1.add_Keyup({
    	if ( $TextBox1.Text.Length -eq 8){
    		$Form1.ActiveControl = $TextBox2
    		$TextBox2.text = $TextBox1.text 
    	}
    })
    
    $TextBox2 = New-Object System.Windows.Forms.TextBox
    $TextBox2.Location = "182, 26"
    $TextBox2.Size = "169, 20"
    
    $Form1.Controls.Add($TextBox1)
    $Form1.Controls.Add($TextBox2)
    
    
    [System.Windows.Forms.Application]::Run($Form1)

    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".


    Donnerstag, 2. August 2012 01:01
    Moderator

Alle Antworten

  • Zusatz:

    Es gibt hier schon eine ähnliche Frage zu dem Thema, die Antwort kam von Denniver. Leider funktionier die Antwort bei mir nicht.

    Ich habe mal das $objTextBox.Add_KeyDown gegen _KeyPress getauscht hilft leider auch nicht.

    Gruß

    Uwe

    Mittwoch, 1. August 2012 13:18
  • Wenn du möchtest, das nach dem Drücken des achten Zeichens weitergesprungen wird, musst du ein anderes Event benutzen. Und zwar eines das nach dem Tastendruck prüft ob nun 8 Zeichen in der Box sind: KeyUP.  (KeyDown wird hingegen während des Tastendrucks ausgelöst)

    Hier ist ein Beispiel:

    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
    
    
    $Form1 = New-Object System.Windows.Forms.Form
    $Form1.ClientSize = "370, 73"
    
    
    $TextBox1 = New-Object System.Windows.Forms.TextBox
    $TextBox1.Location = "23, 26"
    $TextBox1.Size = "138, 20"
    
    $TextBox1.add_Keyup({
    	if ( $TextBox1.Text.Length -eq 8){
    		$Form1.ActiveControl = $TextBox2
    		$TextBox2.text = $TextBox1.text 
    	}
    })
    
    $TextBox2 = New-Object System.Windows.Forms.TextBox
    $TextBox2.Location = "182, 26"
    $TextBox2.Size = "169, 20"
    
    $Form1.Controls.Add($TextBox1)
    $Form1.Controls.Add($TextBox2)
    
    
    [System.Windows.Forms.Application]::Run($Form1)

    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".


    Donnerstag, 2. August 2012 01:01
    Moderator
  • Hallo Denniver,

    vielen Dank, jetzt klappt es so wie ich es haben möchte. KeyUp hatte ich zwar schon gesehen, mir war aber nicht klar wann es was auslöst.

    Gruß

    Uwe

    Donnerstag, 2. August 2012 08:15