none
Focus setzen, so dass Eingabe möglich ist RRS feed

  • Frage

  • Hallo
    Steige gerade von VB6 auf VBnet um. Nun habe ich ein Problem, dass ich nicht lösen kann. Ich möchte den Fokus auf ein Textfeld setzen, so dass eine Eingabe möglich ist. Wie es sich gehört, verwende ich die Focus-Methode:

    txtname.focus

    VB akzeptiert zwar diese Methode (schlägt sie sogar vor!), aber wenn ich das Programm starte, blinkt kein Cursor. Eine Eingabe wird erst möglich, wenn ich das Textfeld anklicke.

    Vielen Dank für Eure Hilfe!
    Montag, 12. Oktober 2009 12:49

Antworten

  • Hallo kuhno,

    eigentlich sollte es mit Focus() funktionieren. Alternativ kannst du auch noch die Methode Select() verwenden.

    Gruß
    Jan
    Montag, 12. Oktober 2009 17:22
  • Setze einfach den TabIndex entsprechend, z.B. so:

    Option Infer On
    Option Strict On
    
    Public Class Form1
    
      Private tb1 As New TextBox With {.Dock = DockStyle.Top, .Text = "tb1 ohne Focus", .TabIndex = 3}
      Private tb2 As New TextBox With {.Dock = DockStyle.Top, .Text = "tb2 mit Focus", .TabIndex = 1}
      Private tb3 As New TextBox With {.Dock = DockStyle.Top, .Text = "tb3 ohne Focus", .TabIndex = 2}
    
      Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Controls.AddRange(New Control() {tb3, tb2, tb1})
      End Sub
    
    End Class
    --
    Peter
    Donnerstag, 15. Oktober 2009 08:33

Alle Antworten

  • Hallo kuhno,

    eigentlich sollte es mit Focus() funktionieren. Alternativ kannst du auch noch die Methode Select() verwenden.

    Gruß
    Jan
    Montag, 12. Oktober 2009 17:22
  • Hi,
    eigentlich ist die Methode die richtige. Ich nehme mal an, du schreibst sie aber in die FormLoad()-Methode? Diese Methode wird aber aufgerufen, direkt nachdem vb die Objekte erzeugt hat. Es führt dann also deine Anweisung aus, den Focus auf txtname zu setzen. Nach dem Ausführen der FormLoad()-Methode werden dann noch ein paar Sachen gemacht, unter anderem, dass der Focus gesetzt wird. Das heißt, vb tut, was du ihm sagst, ändert aber kurze Zeit später den Focus wieder. Du solltest das ganze lieber in die "Shown"-Methode verfrachten, die wird nämlich aufgerufen, nachdem die Form zum ersten Mal gezeigt wurde.

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
            txtname.Focus()
        End Sub

    so ähnlich müsste es dann heißen.

    mfg
    Imperium_Romanum
    MAY THE SOURCE BE WITH YOU!
    • Als Antwort vorgeschlagen Peter77Lustig Freitag, 12. November 2010 11:19
    Mittwoch, 14. Oktober 2009 14:41
  • Setze einfach den TabIndex entsprechend, z.B. so:

    Option Infer On
    Option Strict On
    
    Public Class Form1
    
      Private tb1 As New TextBox With {.Dock = DockStyle.Top, .Text = "tb1 ohne Focus", .TabIndex = 3}
      Private tb2 As New TextBox With {.Dock = DockStyle.Top, .Text = "tb2 mit Focus", .TabIndex = 1}
      Private tb3 As New TextBox With {.Dock = DockStyle.Top, .Text = "tb3 ohne Focus", .TabIndex = 2}
    
      Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Controls.AddRange(New Control() {tb3, tb2, tb1})
      End Sub
    
    End Class
    --
    Peter
    Donnerstag, 15. Oktober 2009 08:33
  • Hi,
    eigentlich ist die Methode die richtige. Ich nehme mal an, du schreibst sie aber in die FormLoad()-Methode? Diese Methode wird aber aufgerufen, direkt nachdem vb die Objekte erzeugt hat. Es führt dann also deine Anweisung aus, den Focus auf txtname zu setzen. Nach dem Ausführen der FormLoad()-Methode werden dann noch ein paar Sachen gemacht, unter anderem, dass der Focus gesetzt wird. Das heißt, vb tut, was du ihm sagst, ändert aber kurze Zeit später den Focus wieder. Du solltest das ganze lieber in die "Shown"-Methode verfrachten, die wird nämlich aufgerufen, nachdem die Form zum ersten Mal gezeigt wurde.

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
            txtname.Focus()
        End Sub

    so ähnlich müsste es dann heißen.

    mfg
    Imperium_Romanum
    MAY THE SOURCE BE WITH YOU!


    Das ist die Antwort, die ich (und wahrscheinlich auch kuhno gesucht) habe! Dass Focus() eigentlich richtig ist, war klar, warum es aber im formload nicht ging, war mir nicht klar.

    Danke

    Freitag, 12. November 2010 11:22