TextBox-Fokus aktiv verlieren

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Enixus.

    TextBox-Fokus aktiv verlieren

    Kurz & knapp:
    Der User tippt in Textbox etwas ein und drückt anschließend die ENTER-Taste. Danach möcht ich mit dem einegebenen Text etwas machen und anschliessend den Fokus von der Textbox wegbekommen. (Ich möchte keinen Cursor mehr ´drin blinken haben.)
    Also so etwas wie:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    2. If e.KeyChar = Chr(Keys.Enter) Then
    3. DoSomething()
    4. Unfocus()
    5. End If
    6. End Sub

    Nur: Was wäre in dem Fall "Unfocus"? Ich hatte die Idee, dass ich einfach der Mainform den Fokus gebe. Aber wie finde ich die parental-Form des Controls heraus? Könnte ja sein, dass die Textbox in diverse Container geschachtelt ist. Hat jemand einen Lösungsvorschlag?
    Das DoSomething() würde ich besser im KeyUp-Event ansiedeln, weil KeyDown das Auto-Repeat sieht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich bin ja im KeyPress-Ereignis. Das ist auch nicht das Problem. Ich glaub, ich muss das Problem mal etwas konkretisieren...

    Das ganze Ding wird ein Benutzersteuerelement. Auf diesem befindet sich unter anderem auch die erwähnte Textbox. Der User gibt dort etwas ein und drückt anschließend die Enter-Taste. Dann werte ich den Kram aus, den der User eingegeben hat. Bis hierhin funzt alles prima. Jetzt möchte ich aber, dass die besagte Textbox den Fokus verliert. Warum? Der Cursor soll verschwinden und die Textbox soll eine graue Hintergrundfarbe bekommen. Ich hab keine Idee, wie ich das machen kann... My.Forms.Form1.Select() und My.Forms.Form1.Focus() bringen beide nichts.

    dbsystel schrieb:

    Mach doch einfach eine TextBox mit den Eigenschaften Visible = False und setz den Focus auf TextBox1.Focus.
    Ansonsten probiers doch einfach mal mit Me anstatt My.Forms.Form1.Focus.
    So eine Fake-Textbox würde ich nur sehr ungern benutzen. Unter Umständen könnte der User 100 dieser Controls in einer Tabelle haben. Da möchte ich ein bisschen Ressourcen-schonend arbeiten. Und "Me.Focus" oder "Me.Select" hat leider keine spürbare Wirkung. Einen kleinen Workaround hab ich schon gefunden. Ich setze die enabled-Eigenschaft kurz einmal auf false und direkt danach wieder auf true.

    VB.NET-Quellcode

    1. Me.Enabled = False
    2. Me.Enabled = True

    Schwupps, mein Fokus ist weg. Wäre trotzdem dankbar, falls jemand noch etwas anderes wüsste, weil's kurz flackert...

    EDIT:
    Ok- hab noch ein wenig herausgefunden, was mir geholfen hat: Ein Custom-Control kann wohl nur sehr schwer überreden selbst den Fokus auf sich zu nehmen. Gibt zwar Workarounds, aber das Ding soll halt vom Design her einfach nur ein Container bleiben. Deshalb habe ich das Control jetzt von Hand in einem Custom-User-Control nachgebaut. Dieses kann nämlich sehr wohl den Fokus bekommen. Danach war es ein leichtes, den Fokus von der Textbox wegzubekommen und dem Custom-User-Control zu geben.

    Problem gelöst.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Enixus“ ()