ich habe ein Programm geschrieben, mit dem ich per Doppelklick in einem in einer Textbox stehenden Satz einen Punkt einfügen oder löschen kann. Ist bei der Cursorposition in dem Satz kein Punkt vorhanden,
wird dort einer eingefügt. Ist ein Punkt innerhalb des Satzes vorhanden, kann der Cursor links oder rechts von diesen Punkt per Doppelklick ihn wieder löschen. Das klappt alles wunderbar.
Leider musste ich in die Userform ein zweites Textfeld TextBox2 einbauen. Diese TextBox2 hat nur die Aufgabe den Focus zu übernehmen, damit in der Textbox1 nach dem Doppelklick die Markierung aufgehoben wird.
Das kann es nicht sein! Ich will nach dem Doppelklick in der TextBox1 keine Markierung haben. Aber wie bekomme ich das hin?
Zur Veranschaulichung der Problematik habe ich euch mein kleines Programm als Attachment hochgeladen.
Code:
Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim intA As Integer
Dim vbstr As String
With TextBox1
TextBox1.SetFocus
intA = .SelStart
vbstr = .Text
End With
'Problemstelle
With TextBox1
.SetFocus
.Text = vbstr
End With
'Markierung Aufheben geht nur mit TextBox2.SetFocus
TextBox2.SetFocus
End Sub
Sub UserForm_Initialize()
Dim vbstr
vbstr = "Per Doppelklick kann innerhalb dieses Satzes ein Punkt gesetzt oder gelöscht werden."
TextBox1 = vbstr
TextBox1.Font.Size = 15
End Sub
im VBA-Editor findest Du, gewöhnlich ist das links unten, ein Eigenschaftenfenster.
Dort kannst Du get Fokus on Klick oder so ähnlich ein oder ausschalten.
Dann kannst Du getrost die zweite Box wieder in Rente schicken.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!
Moin!
Mal quick & dirty:
Ich habe die Größe der TextBox2 auf Null gesetzt, Hintergrund transparent und ohne Rahmen.
(manche würden sagen: unsichtbar)
:21:
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Zitat:Mal quick & dirty: Ich habe die Größe der TextBox2 auf Null gesetzt, Hintergrund transparent und ohne Rahmen. (manche würden sagen: unsichtbar)
Zitat:Also diese Einstellung kann ich leider nirgendwo finden.
... wenn der Ralf das so gemacht hat, dann gehe ich mal getrost davon aus, daß die von mir
vorgeschlagene Möglichkeit bei Textboxen nicht greift weil nicht vorhanden.
Ich konnte das nicht testen, das war also mein Gedankenfehler.
Also gräme Dich nicht mehr. Ich entschuldige mich auch ganz artig bei Dir.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!
Hallo Leute,
anbei meine eigene (Schnell-) Lösung des Problems zum Download und Ausprobieren. Das Makro funktioniert perfekt, aber gut möglich, dass es Codemäßig eine bessere Lösung gibt.
26.06.2016, 06:57 (Dieser Beitrag wurde zuletzt bearbeitet: 26.06.2016, 06:58 von RPP63.)
Moin!
Ist aber mindestens genau so "dreckig" wie meine Lösung. :19:
Das Problem liegt beim Doppelklick, der Windowskonform eine Markierung auslöst, die hier nicht erwünscht ist.
Viel besser ist hier der einfache Klick.
Sinnvoll in Verbindung mit Umschalt, Strg und/oder Alt.
(ich habe erst mal nur einen einfachen Klick ohne Zusatztaste verwendet)
Das Ereignis findest Du hier erklärt: https://msdn.microsoft.com/de-de/library...78486.aspx
Dann braucht es auch diese Trickserei nicht mehr.
Ich habe also den CommandButton wieder herausgeworfen,
alles jetzt Überflüssige aus dem Code geworfen,
das Initialize durch manuelles Setzen der Eigenschaften überflüssig gemacht
und unseren Code mal vernünftig strukturiert, damit er auch lesbar ist. :21:
Hallo Ralf,
vielen Dank für deine außerordentlich große Mühe. Auch ich hatte recherchiert und herausgefunden, dass die Markierungen typisches Verhalten der Textboxen sind,
konnte aber keine Microsoftquelle angeben. Inzwischen habe ich den etwas schnell hingeschriebenen Code auch nochmal verbessert. Vor allem bei der Toleranzprogrammierung,
ob der Cursor links oder rechts vom Punkt seht.
Und dann, ach ja SNB...
You've made my day!!! Besser als das Netz.
Im Upload befindet sich auch dein Code, natürlich mit deutlicher Kennzeichnung der Urheberschaft.
Codeverbesserung. Per Doppelklick können der Reihe nach alle vorgegebenen Satzzeichen durch das Arrays vbF durchgelickt werden.
Code:
Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = True
Dim vbF
With TextBox1
vbF = Array(".", "!", "?", ",", ";", "")
For i = 0 To UBound(vbF)
If Not InStr(Mid(.Text, .SelStart - 1, 3), vbF(i)) = 0 Then
i = i + 1
Exit For
End If
Next i
If UBound(vbF) + 1 = i Then
'Punkt setzen
.Text = Mid(.Text, 1, .SelStart) & vbF(0) & Mid(.Text, .SelStart + 1, Len(.Text) - .SelStart + 1)
Else
If Mid(.Text, .SelStart + 1, 1) = vbF(i - 1) Then
.Text = Left(.Text, .SelStart) & Replace(Mid(.Text, .SelStart + 1, 1), vbF(i - 1), vbF(i)) & Right(.Text, Len(.Text) - .SelStart - 1)
Else
.Text = Left(.Text, .SelStart - 1) & Replace(Mid(.Text, .SelStart, 1), vbF(i - 1), vbF(i)) & Right(.Text, Len(.Text) - .SelStart)
End If
End If
End With
End Sub
Sub UserForm_Initialize()
Dim vbstr
vbstr = "Per Doppelklick kann innerhalb dieses Satzes nacheinander verschiedene Satzzeichen gesetzt oder gelöscht werden."
TextBox1 = vbstr
TextBox1.Font.Size = 15
End Sub