Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Probleme mit der Set Fokus von ein Dialog zu ein Formular

Begonnen von faby, April 21, 2025, 17:08:54

⏪ vorheriges - nächstes ⏩

faby

Hallo,

ich benutze MS Access 2010 Professional. Ich möchte Kroatische Vokabel lernen und mein DB ist soweit in Ordnung außer das wenn ich lerne manchmal kommen Kroatisch Sonderzeichen für ein Wort dann habe ich ein Hauptformular wo die Vokabel eingegeben und geprüft werden und ein Dialog Formular mit die Sonderzeichen, es funktioniert alles aber wenn ein Sonderzeichen eingefügt wird in txtAntwort dann bleibt der Fokus auf den frmSonderzeichen anstatt auf den txtAntwort von frmVokabelTrainer. Hier mein Code vielleicht jemand hat eine Lösung für mich?

Option Compare Database
Option Explicit
Private Sub Form_Load()
    ' Hilfsfunktion hinzufügen
    If IsFormLoaded("frmVokabelTrainer") Then
        Me.Move Left:=9000, Top:=1000, Width:=7000, Height:=5000
    End If
End Sub

' Hilfsfunktion außerhalb des Form_Load einfügen
Function IsFormLoaded(FormName As String) As Boolean
    Dim frm As Form
   
    On Error Resume Next
    Set frm = Forms(FormName)
    IsFormLoaded = (Err.Number = 0)
    On Error GoTo 0
End Function

' Fügt das Zeichen an der aktuellen Cursorposition im Textfeld txtAntwort auf frmVokabelTrainer ein
Private Sub ZeichenEingeben(ByVal s As String)
    Dim txt As Control
    Set txt = Forms!frmVokabelTrainer!txtAntwort
   
    Dim curText As String
    curText = txt.Text
   
    Dim pos As Long
    pos = txt.SelStart
   
    Dim newText As String
    newText = Left(curText, pos) & s & Mid(curText, pos + 1)
   
    txt.Text = newText
    txt.SelStart = pos + Len(s)
    txt.SelLength = 0

    txt.setFocus
End Sub

Private Sub btnD_Click()
Dim txt As Control '?

 Call ZeichenEingeben(ChrW(272)) ' Ð

End Sub

Private Sub btn_d_Click()

Call ZeichenEingeben(ChrW(273)) ' d

End Sub

Private Sub btnCC_Click()

Call ZeichenEingeben(ChrW(268)) ' C

End Sub

Private Sub btn_cc_Click()

Call ZeichenEingeben(ChrW(269)) ' c

End Sub

Private Sub btnS_Click()

Call ZeichenEingeben(ChrW(352)) ' Š

End Sub

Private Sub btn_s_Click()

Call ZeichenEingeben(ChrW(353)) ' š

End Sub

Private Sub btnC_Click()

Call ZeichenEingeben(ChrW(262)) ' C

End Sub

Private Sub btn_c_Click()

Call ZeichenEingeben(ChrW(263)) ' c

End Sub

Private Sub btnZ_Click()

Call ZeichenEingeben(ChrW(381)) ' Ž

End Sub

Private Sub btn_z_Click()

Call ZeichenEingeben(ChrW(382)) ' ž

End Sub


Knobbi38

Hallo,

ich nehme jetzt mal an, daß deine "Dialogform" ein nicht-modales Popup-Formular ist, denn eigentlich sind Dialoge von Haus aus modal.

Zum Zweiten kann der Code so nicht richtig funktioniert haben, denn der Zugriff auf txtAntwort.Text bedingt, daß die Textbox bereits vorher den Fokus besitzt. Ich sehe jetzt keinen Code, der den Fokus vorher auf die Textbox setzt.

Die Funktion "IsFormLoaded()" ist übrigens komplett überflüssig und kann durch folgende Codezeile ersetzt werden:
CurrentProject.AllForms("[i]Formularname[/i]").IsLoaded
Dann solltest du es vermeiden, direkt aus dem Popup-Formular mit "ZeichenEingeben()" in das Steuerelements eines anderen Formulars zu schreiben. Zeicheneingeben() sollte eine Public Funktion im Formular frmVokabelTrainer sein, welche dann aus dem Popup-Formular aufgerufen wird. Eine Referenz auf frmVokabelTrainer kann beim Öffnen des Popup-Formulars einmal Zugewiesen werden. 

Gruß Knobbi38



faby


Danke für dein Feedback
Zitatich nehme jetzt mal an, daß deine "Dialogform" ein nicht-modales Popup-Formular ist, denn eigentlich sind Dialoge von Haus aus modal.

Ich vermute ja bin aber nicht sicher da ich keine Modal Eigenschaft beim Formular gefunden habe

ZitatZum Zweiten kann der Code so nicht richtig funktioniert haben, denn der Zugriff auf txtAntwort.Text bedingt, daß die Textbox bereits vorher den Fokus besitzt. Ich sehe jetzt keinen Code, der den Fokus vorher auf die Textbox setzt.

Ich hatte probiert einfach am Ende der ZeichenEingeben ein SetFocus gesetzt aber hat nicht funktioniert

ZitatDie Funktion "IsFormLoaded()" ist übrigens komplett überflüssig und kann durch folgende Codezeile ersetzt werden:
Code[Auswählen]
CurrentProject.AllForms("Formularname").IsLoaded

Dann solltest du es vermeiden, direkt aus dem Popup-Formular mit "ZeichenEingeben()" in das Steuerelements eines anderen Formulars zu schreiben. Zeicheneingeben() sollte eine Public Funktion im Formular frmVokabelTrainer sein, welche dann aus dem Popup-Formular aufgerufen wird. Eine Referenz auf frmVokabelTrainer kann beim Öffnen des Popup-Formulars einmal Zugewiesen werden.

Einfach toll ich habe in der frmVokabelTrainer die Public Function eingefügt und was neues gelernt danke dir

Es bleibt nur die Frage mit der SetFocus wenn jemand eine Idee hat?
 

Knobbi38

Hallo faby,

Zitat... am Ende der ZeichenEingeben ein SetFocus gesetzt ...

am Ende dürfte das wenig helfen. Ich hatte geschrieben, daß vorher der Fokus auf die Textbox gesetzt werden muß, also wäre am Anfang sicherlich hilfreicher.

Gruß
Knobbi38