2016-05-03 9 views
0

VB.net .. Zur Zeit habe ich zwei Steuerelemente, eine Richtextbox und eine Textbox. Die RTB wird nur gelesen, und auch HideSelection wird auf false gesetzt.VB.net, Text in einer Richtextbox auswählen können, ohne den Fokus zu verlieren?

Die Textbox ist generisch, sie ermöglicht die Eingabe (um Daten zu senden).


Ich möchte Dinge in der Richtextbox auswählen können, ohne den Fokus in der Textbox zu verlieren. Es gibt einen Client namens "mushclient", der das tut, und es funktioniert ziemlich gut. Der Text ist immer noch ausgewählt, aber er verliert nicht den Fokus auf die Chatbar zum Eintippen.

Ich weiß aber nicht genau, aber wie man "Fokus" verhindert. In dem Moment, in dem es den Spielfluss unterbricht, wenn du im Spiel bist, aber etwas kopieren möchtest, musst du erneut auf das Textfeld klicken, um die Eingabe erneut zu starten. Ich verstehe, dass ich nach dem Klicken auf den RTB den Fokus festlegen könnte, aber das fühlt sich insgesamt etwas komisch an. Ich habe mich gefragt, ob es eine elegantere Lösung gibt.

Danke!

Antwort

1

Das scheint für mich gut zu funktionieren. Die TextBox verliert den Fokus, aber sobald das Mouse_UP-Ereignis ausgelöst wird, wird der ausgewählte Text in die Zwischenablage kopiert und der Fokus wird zurück an das Textfeld gesendet.

Public Class Form1 
    Dim LostFocusControl As Control 

    Private Sub RichTextBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles RichTextBox1.MouseUp 
     If RichTextBox1.SelectedText.Length > 0 Then 
      Clipboard.SetText(RichTextBox1.SelectedText) 
     End If 
     If Not IsNothing(LostFocusControl) Then 
      LostFocusControl.Focus() 
     End If 
    End Sub 

    Private Sub ControlLostFocus(sender As Object, e As EventArgs) Handles TextBox1.LostFocus 
     LostFocusControl = Sender 
    End Sub 
End Class 

Der Code ist ein bisschen länger als es sein könnte, aber das macht es einfacher, wenn Sie später die Steuerung ändern möchten, die zurückgegeben konzentrieren. Um die Steuerung zu ändern, die Sie Fokus, nur den Namen ändern, der Kontrolle, die der Handler abonniert zurückkehren wollen, ist zB

ändern

Private Sub ControlLostFocus(sender As Object, e As EventArgs) Handles TextBox1.LostFocus 

zu

Private Sub ControlLostFocus(sender As Object, e As EventArgs) Handles Listbox1.LostFocus 

oder was auch immer der Name des Steuerelements ist, dass Sie den Fokus zurückgeben möchten.

Verwandte Themen