VB6 Textbox Effekt beim Markieren

08/01/2009 - 09:31 von Christian Havel | Report spam
Hi,

ich selektiere den gesamten Text in einer Textbox, wenn diese den Focus
erhàlt mit nachstehendem Code:

txtBox.SelStart = 0
txtBox.SelLength = Len(txtBox.Text)

Dies funktioniert meistens auch wunderbar. Hin und wieder passiert es, wenn
mit der Maus in die Textbox (hatte zuvor noch keinen Focus) geklickt wird,
dass nicht der gesamte Text markiert ist, sondern die Markierung nur bis zu
der Stelle reicht, an welcher in die Textbox geklickt wurde. Wenn ich
txtBox.SelLength und txtBox.SelText direkt nach dem obigen Aufruf aufrufe,
wird angegeben, dass (wie erwartet) der gesamte Text markiert ist.

Dies passiert bei ca. 1 von 10 Fàllen.

Kann mir dies jemand erklàren bzw. eine Lösung für dieses Problem nennen?

Danke Christian
 

Lesen sie die antworten

#1 Harald M. Genauck
08/01/2009 - 10:08 | Warnen spam
Hallo Chrstian,

ich selektiere den gesamten Text in einer Textbox, wenn diese den
Focus
erhàlt mit nachstehendem Code:

txtBox.SelStart = 0
txtBox.SelLength = Len(txtBox.Text)

Dies funktioniert meistens auch wunderbar. Hin und wieder passiert
es, wenn
mit der Maus in die Textbox (hatte zuvor noch keinen Focus) geklickt
wird,
dass nicht der gesamte Text markiert ist, sondern die Markierung nur
bis zu
der Stelle reicht, an welcher in die Textbox geklickt wurde. Wenn ich
txtBox.SelLength und txtBox.SelText direkt nach dem obigen Aufruf
aufrufe,
wird angegeben, dass (wie erwartet) der gesamte Text markiert ist.

Dies passiert bei ca. 1 von 10 Fàllen.

Kann mir dies jemand erklàren bzw. eine Lösung für dieses Problem
nennen?



Das passiert, wenn nach dem Drücken der Maustaste die Maus/der Zeiger
bewegt wird, bevor die Maustaste wieder losgeslassen wird. An sich ist
dieser Effekt standardmàßig vorgesehen, so dass man so gleich eine
gewünschte Lànge markieren kann. Wenn die Maus jedoch sehr
hochempfindlich ist und/oder man ein wenig zittrige Finger hat, genügt
schon die kleinste Bewegung, um diesen Effekt zu bewirken.

Wenn Du dieses Verhalten unbedingt umgehen (und den Standard außer
Kraft setzen) willst, dann könntest Du mit einem Flag den Fokuserhalt
per Maus markieren:

Private mSF As Integer

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
mSF = 1
End Sub

Private Sub Text1_GotFocus()
SelAll Text1
If mSF = 1 Then
mSF = 2
End If
End Sub

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If mSF = 2 Then
SelAll Text1
End If
End Sub

Private Sub SelAll(tb As TextBox)
With tb
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub

Die zweistufige Zàhlung deshalb, damit die Markierung in MouseUp nur
dann erfolgt, wenn MouseDown (was vor GotFocus gefeuert wird) und
GotFocus zusammentreffen.


Viele Grüße und ein schönes neues Jahr

Harald M. Genauck

"VISUAL STUDIO one" - http://www.visualstudio1.de (Chefredakteur)
"ABOUT Visual Basic" - http://www.aboutvb.de (Herausgeber)

Ähnliche fragen