Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: malihini am November 22, 2011, 19:09:32

Titel: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: malihini am November 22, 2011, 19:09:32
Ich hab' ein Formular mit zwei Textfeldern: txtEingabe und txtausgabe und einen Button:
cmd_fett. In txtEingabe soll der markierte Text mit HTML <b></b> umgeben werden und in
txtausgabe ausgegeben werden, nachdem auf btn_fett geclickt wurde.
Funktioniert auch, aber eben immer erst nach dem zweiten click. Was mach ich falsch?
Danke im Voraus für Eure Hilfe.

Option Compare Database
Option Explicit

Private ZuErsetzen As String
Private Inhalt As String

Private Sub cmd_bold_Click()
On Error GoTo cmd_bold_Click_Error

If ZuErsetzen = "" Then
Exit Sub
End If

Inhalt = Replace(Inhalt, ZuErsetzen, "<b>" & ZuErsetzen & "</b>")

With Me.txtausgabe
.SetFocus
.Text = Inhalt
End With

ZuErsetzen = ""
Inhalt = ""

Exit Sub
cmd_bold_Click_Error:
fehlerbehandlung err, "Form_frmmarkiertertext", "cmd_bold_Click"
End Sub

Private Sub txtEingabe_LostFocus()
On Error GoTo txtEingabe_LostFocus_Error

If (IsNull(Me.txtausgabe.Value)) Then
Inhalt = Me.txtEingabe.Value
Else
Inhalt = Me.txtausgabe.Value
End If
ZuErsetzen = Me.txtEingabe.SelText

Exit Sub
txtEingabe_LostFocus_Error:
fehlerbehandlung err, "Form_frmmarkiertertext", "txtEingabe_LostFocus"
End Sub
Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: Beaker s.a. am November 22, 2011, 21:14:15
Hallo Malihini,
ZitatInhalt = Me.txtEingabe.Value
Versuche es hier mal mit der Eigenschaft .Text statt .Value

Und,
ZitatZuErsetzen = Me.txtEingabe.SelText
Bist Du sicher, dass an dieser Stelle in .SelText überhaupt noch was drin steht?
Das würde ich vielleicht am Anfang der Procedur zwischenspeichern:

Private Sub txtEingabe_LostFocus()
On Error GoTo txtEingabe_LostFocus_Error
Dim sSelText as String
sSelText = Me!txtEingabe.SelText

If (IsNull(Me!txtausgabe.Value)) Then
.
.

hth
gruss ekkehard

P.S. Lies Mal http://www.donkarl.com/ FAQ 6.3
Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: database am November 22, 2011, 22:18:49
Hallo,

die Eigenschaften '.Text' und '.Value' sind in deinem Anwendungsfall nicht notwendig.

Kopier mal untenstehenden Code in dein Formular ...  ;)


Option Compare Database
Option Explicit

Private ZuErsetzen As String
Private Inhalt As String
Private Textfehler As Boolean

Private Sub cmd_bold_Click()

   If IsNull(Me.txtEingabe) And Textfehler = False Then
       MsgBox "Das Feld 'Eingabe' ist leer!"
   End If
   
   Textfehler = False
   
End Sub

Private Sub txtEingabe_LostFocus()

On Error GoTo txtEingabe_LostFocus_Error

If Not IsNull(Me.txtEingabe) Then
   If Len(Me.txtEingabe.SelText) Then
       ZuErsetzen = Me.txtEingabe.SelText
       Inhalt = "<b>" & ZuErsetzen & "</b>"

       Me.txtAusgabe.SetFocus
       Me.txtAusgabe = Inhalt
       
       ZuErsetzen = ""
       Inhalt = ""
   Else
       MsgBox "Im Feld Eingabe wurde kein Text markiert!"
   End If
Else
   MsgBox "Das Feld 'Eingabe' ist leer!"
   Textfehler = True
End If

Exit Sub

txtEingabe_LostFocus_Error:
   fehlerbehandlung Err, "Form_frmmarkiertertext", "txtEingabe_LostFocus"

End Sub


Die MessageBox im Click-Ereignis ist für den Fall, dass der Button geklickt wurde ohne dass im txtEingabe Text eingegeben wurde.

HTH
Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: malihini am November 23, 2011, 14:42:10
Hallo ekkehard und Hallo Database,

danke für Eure schnelle Antwort. Beide Lösungen funktionieren. Aber auch erst wieder nach dem zweiten klick.
Habt Ihr Euren Code mal ausprobiert, ob es bei Euch beim ersten klick funzt?

Bei meinem und bei Eurem Code: Wenn ich in das Textfeld txtEingabe das erste mal was eingebe und was markiere, geht klick nicht. Jeder weitere klick dann funktioniert.
Also jedes mal bei einer neuen Eingabe geht es erst beim zweiten mal.

Nach weiterer Suche hab' ich doch eine Lösung.
Der zu ersetzende Text wird bei Mouse_up ausgelesen.


Private Sub txtEingabe_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error GoTo txtEingabe_MouseUp_Error
   
    If (IsNull(Me.txtEingabe.Text)) Then
        ZuErsetzen = ""
    Else
        ZuErsetzen = Me.txtEingabe.SelText
    End If

Exit Sub
txtEingabe_MouseUp_Error:
    fehlerbehandlung err, "Form_frmmarkiertertext", "txtEingabe_MouseUp"
End Sub

Private Sub txtEingabe_LostFocus()
On Error GoTo txtEingabe_LostFocus_Error

    If (IsNull(Me.txtausgabe.Value)) Then
        If (IsNull(txtEingabe.Value)) Then
            Inhalt = ""
        Else
            Inhalt = Me.txtEingabe.Value
        End If
    Else
        Inhalt = Me.txtausgabe.Value
    End If

Exit Sub
txtEingabe_LostFocus_Error:
    fehlerbehandlung err, "Form_frmmarkiertertext", "txtEingabe_LostFocus"
End Sub

Private Sub cmd_bold_Click()
On Error GoTo cmd_bold_Click_Error

    If ZuErsetzen = "" Then
        Exit Sub
    End If

    Inhalt = Replace(Inhalt, ZuErsetzen, "<b>" & ZuErsetzen & "</b>")

    With Me.txtausgabe
        .SetFocus
        .Text = Inhalt
    End With

    ZuErsetzen = ""

Exit Sub
cmd_bold_Click_Error:
    fehlerbehandlung err, "Form_frmmarkiertertext", "cmd_bold_Click"
End Sub

Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: Stapi am November 23, 2011, 15:31:32
Hallo malihini

Versuch mal.
........
If ZuErsetzen = "" Then
Exit Sub
End If
RunCommand acCmdSaveRecord

Inhalt = Replace(Inhalt, ZuErsetzen, "<b>" & ZuErsetzen & "</b>")
......

Gruß stefan
Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: database am November 23, 2011, 20:38:37
Hallo,

ZitatHabt Ihr Euren Code mal ausprobiert, ob es bei Euch beim ersten klick funzt

davon kannnst du getrost ausgehen.  ;)
Schau mal das Beispiel im Anhang an.
::)

HTH

[Anhang gelöscht durch Administrator]
Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: Beaker s.a. am November 23, 2011, 23:37:26
Hallo Stefan,
ZitatHabt Ihr Euren Code mal ausprobiert, ob es bei Euch beim ersten klick funzt?
Ehrlich gesagt, nein.
ZitatWenn ich in das Textfeld txtEingabe das erste mal was eingebe und was markiere, geht klick nicht. Jeder weitere klick dann funktioniert.
Das war die Tatsache, weshalb ich auf .Text statt .Value getippt habe. Was mich auch dieses
ZitatDer zu ersetzende Text wird bei Mouse_up ausgelesen.
vermuten lässt. Ich bevorzuge i.Ü. die Text-Eigenschaft, weil die sowohl Before- als auch AfterUpdate den Inhalt des Controls wieder gibt.
Hast Du mal getestet, welche Ereignisse vor dem Click Ereignis ablaufen, und ob da Code ausgeführt wird?

@database
Zitatdie Eigenschaften '.Text' und '.Value' sind in deinem Anwendungsfall nicht notwendig
Mag sein, .Text kann aber bei Controls, die Stringwerte erwarten/erhalten IMO nie verkehrt sein.
gruss
ekkehard
Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: database am November 24, 2011, 13:54:35
Hallo,

@Baeker
Zitat.Text kann aber bei Controls, die Stringwerte erwarten/erhalten IMO nie verkehrt sein.

Von 'verkehrt sein' war keine Rede - nur die Notwendigkeit besteht bei Access nicht (VB6 wäre da schon ein wenig eigenwilliger)  ;)
Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: malihini am November 24, 2011, 15:26:24
Hallo Database,

danke für Dein Beispiel. Hab's gleich ausprobiert. Wenn ich das erste Mal Text eingebe und markiere kommt die MsgBox "Das Feld 'Eingabe' ist leer!", also auch jetzt funktioniert es erst nach dem zweiten click.
Das kann doch nicht sein?
Wie oben gepostet, mit mouseUp geht es.
Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: daolix am November 24, 2011, 17:07:15
Wenns mit mouseUp funktioniert dann nimm es doch so. Ich konne dein problem nachvollziehen, sobald der Text in der Eingabe-Textbox geändert wird funktioniert das Auslesen des Eingabe-Textbox.SelText in der Sub .._lostFocus irgendwie nicht, d.h. die Variable ZuErsetzen ist leer. Warum das so ist ist weis ich jetzt nicht, ist wohl eins der vielen Geheimnisse von MS.
Dafür reicht dann in der sub txtEingabe_MouseUp nur eine Zeile mit ZuErsetzen = Me.txtEingabe.SelText
Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: Beaker s.a. am November 24, 2011, 22:47:03
Hallo Peter,
ZitatVon 'verkehrt sein' war keine Rede
Hatte ich auch nicht so verstanden, was ich sagen wollte, war "kann nicht schaden".
Und Notwendigkeit ergibt sich IMO u.U. durch Gültigkeitsprüfungen in Control_BeforeUpdate.
Oder bin ich da auf dem Holzweg?
gruss ekkehard
Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: DF6GL am November 25, 2011, 08:28:08
Hallo,

zum Therma "verkehrt":


Leider ist die TEXT-Eigenschaft nur dann verfügbar, wenn das betroffene Control den Fokus besitzt. Das ist aber  in den meisten Fällen, wenn man den Inhalt des Controls braucht, nicht der Fall, und ein dauerndes Setfocus-Gehoppse ist auch nicht das Gelbe vom Ei...

Titel: Re: selText funktioniert erst beim zweiten click. Warum?
Beitrag von: Beaker s.a. am November 25, 2011, 22:40:40
Hallo Franz,
ZitatLeider ist die TEXT-Eigenschaft nur dann verfügbar, wenn das betroffene Control den Fokus besitzt.
Grrr, stimmt, nicht dran gedacht  :-[
Morgens um halb eins hab ich aber schon mal solche Aussetzer.
gruss ekkehard