Cursorpositionierung beim Aufbau einer Form

01/05/2008 - 16:28 von T. Krettek | Report spam
Hallo NG,

beim Laden einer Form habe ich das folgende Problem:

Der Cursor soll per Programmroutine auf ein best. Textfeld positioniert
werden(textBox.Focus()). Das geht auch so weit; nach dem Aufbau der Form
steht der Cursor im gewünschten Feld X. Beim show-Ereignis erhàlt aber
zunàchst das erste fokussierbare Textfeld A den Focus (bzw. dessen
Enter-Routine wird durchlaufen), so daß bem Verlassen des Textfeldes X (durch
Benutzereingabe) die Validate-Routine des Textfeldes A aufgerufen wird.

Hat jemand eine Idee, wie ist das zu verhindern ist?


T. Krettek
 

Lesen sie die antworten

#1 Peter Götz
01/05/2008 - 18:26 | Warnen spam
Hallo T.

beim Laden einer Form habe ich das folgende Problem:

Der Cursor soll per Programmroutine auf ein best.
Textfeld positioniert werden(textBox.Focus()). Das
geht auch so weit; nach dem Aufbau der Form
steht der Cursor im gewünschten Feld X.
Beim show-Ereignis



Bei welchem "Show-Ereignis"?
Eine Form hat kein "Show-Ereignis".
Es gibt ein Ereignis

Form_Shown()

welches einmalig ausgelöst wird, wenn die Form
nach dem Laden zum ersten mal angezeigt wird.

erhàlt aber zunàchst das erste fokussierbare
Textfeld A den Focus (bzw. dessen Enter-Routine
wird durchlaufen), so daß bem Verlassen des Textfeldes
X (durch Benutzereingabe) die Validate-Routine des
Textfeldes A aufgerufen wird.

Hat jemand eine Idee, wie ist das zu verhindern ist?



Dafür gibt es mehrere Möglichkeiten.
Du kannst den bewussten Ereignishandler statt mit
einer Handles-Klausel per AddHandler() erst in der
Sub Form_Shown() einschalten.

Private Sub Form1_Shown
(ByVal sender as Object, _
ByVal e as System.EventArgs _
) Handles Me.Shown

TextBox3.Focus()

AddHandler _
Textbox1.Validating, _
AddressOf TextBox1_Validating

End Sub

Private Sub TextBox1_Validating _
(ByVal sender as Object, _
ByVal e as System.ComponentModel.CancelEventArgs)

Console.WriteLine "TextBox1_Validating"

End Sub



Wenn bestimmter Code je nach Situation ausgeführt
oder auch nicht ausgeführt werden soll, kannst Du
auch eine Hilfsvariable (mFlag) nutzen:

Private mFlag as Boolean

Form1_Shown _
(ByVal sender as Object, _
ByVal e as System.EventArgs _
) Handles Me.Shown

' blablabla
mFlag = True
end if

Private Sub AnySub()
if mFlag then
' Code ausführen
end if
End sub

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen