2016-05-03 2 views
0

VB.net .. В настоящее время у меня есть два элемента управления, один richtextbox и текстовое поле. RTB только для чтения, а для HideSelection установлено значение false.VB.net, возможность выбора текста в richtextbox без потери фокуса?

Текстовое поле является общим, оно позволяет вводить данные (для передачи данных).


Я хочу иметь возможность выбирать вещи в richtextbox без потери фокуса в текстовом поле. Существует клиент под названием «mushclient», который делает это, и он работает очень хорошо. Текст по-прежнему выбран, но он не теряет фокус на чат-панели для ввода.

Я точно не знаю, как предотвратить «фокус». В настоящий момент он прерывает поток, когда вы в игре, но хотите что-то скопировать, вам нужно будет снова щелкнуть текстовое поле, чтобы снова ввести текст. Я понимаю, что могу настроитьфокусировку после нажатия на RTB, но это кажется немного странным. Мне было интересно, есть ли более элегантное решение.

Спасибо!

ответ

1

Это, кажется, работает хорошо для меня. TextBox не выполняет фокус, но как только происходит событие Mouse_UP, выбранный текст копируется в буфер обмена, а фокус отправляется обратно в текстовое поле.

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 

код немного больше, чем это может быть, но это делает его легче, если в дальнейшем вы хотите изменить элемент управления, фокус возвращается в. Чтобы изменить элемент управления, который вы хотите вернуть фокус, просто изменить имя элемента управления, который подписался обработчик, чтобы, например,

Изменение

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

Для

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

или независимо от названия управления - это то, что вы хотите вернуть фокус.

Смежные вопросы