Hi,
ich habe eine Multilne Textbox
Das hab ich wie folgt kodiert:
Das funktionier auch sehr gut. Aber natürlich würde ich das gern (wie in Editoren üblich) nicht mit einem Button Click sondern mit der TAB Taste erreichen.
Die TAB Taste ist aber von Windows belegt. Und deshalb muss ich das KeyPreview Ereignis verwenden:
Das funktioniert auch ... aber ...
... aber die Windows TAB Funktion wird NACH dem Preview Ereignis immer noch ausgelöst. Und damit springt der Focus auf die nächste Tab Position und txtData verliert den Focus. Meine Anweisung
Das ist blöde. Denn so muss ich nach einem TAB immer erst noch einmal txtData anklicken, um den Focus zurück zu erhalten, bevor ich den nächsten TAB eingeben kann. So richtig gut kann man damit nicht arbeiten !
Tja .... wie kann entweder verhindern, dass die Windows Funktion TAB ausgeführt wird (KeyPreview kennt weder
Oder wenn schon der Focus wechselt, wie kann ich den Focus auf txtData zurück erhalten ? Dazu müsste ich eine Funktion auslösen können, die erst NACH dem Windows TAB ausgeführt wird. Leider gibt es kein
Die üblichen Techniken funktionieren hier also nicht. Any bright ideas ?
LG
Peter
ich habe eine Multilne Textbox
txtData
. In dieser Textbox erfasse ich z.B. HTML Code. Dazu muss man häufig einrücken. Das würde ich gern per Tastendruck ermöglichen.Das hab ich wie folgt kodiert:
VB.NET-Quellcode
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- TabIndent()
- End Sub
- Private Sub TabIndent()
- 'Get caret postition
- Dim myCaretPosition As Integer = txtData.SelectionStart
- If myCaretPosition < 0 Then Exit Sub 'Just to make sure
- 'Insert indentation
- Dim indent As String = "xxxx" 'Insert four blanks (test=xxxx)
- txtData.Text = txtData.Text.Insert(myCaretPosition, indent)
- 'Set new caret position
- txtData.Select(myCaretPosition + indent.Length, 0)
- txtData.Focus()
- End Sub
Das funktionier auch sehr gut. Aber natürlich würde ich das gern (wie in Editoren üblich) nicht mit einem Button Click sondern mit der TAB Taste erreichen.
Die TAB Taste ist aber von Windows belegt. Und deshalb muss ich das KeyPreview Ereignis verwenden:
Das funktioniert auch ... aber ...
... aber die Windows TAB Funktion wird NACH dem Preview Ereignis immer noch ausgelöst. Und damit springt der Focus auf die nächste Tab Position und txtData verliert den Focus. Meine Anweisung
txtData.Focus
wird "ausgehebelt". Das ist blöde. Denn so muss ich nach einem TAB immer erst noch einmal txtData anklicken, um den Focus zurück zu erhalten, bevor ich den nächsten TAB eingeben kann. So richtig gut kann man damit nicht arbeiten !
Tja .... wie kann entweder verhindern, dass die Windows Funktion TAB ausgeführt wird (KeyPreview kennt weder
e.handled
noch e.cancel
!) Oder wenn schon der Focus wechselt, wie kann ich den Focus auf txtData zurück erhalten ? Dazu müsste ich eine Funktion auslösen können, die erst NACH dem Windows TAB ausgeführt wird. Leider gibt es kein
PreviewKeyUp
Ereignis ... Die üblichen Techniken funktionieren hier also nicht. Any bright ideas ?
LG
Peter