Winforms Textbox - Использование Ctrl-Backspace для удаления всего слова - PullRequest
30 голосов
/ 14 июля 2009

У меня есть диалоговое окно Winforms, которое содержит среди других элементов управления TextBox, который допускает одну строку ввода. Я хотел бы позволить пользователю иметь возможность нажать Ctrl-Backspace, чтобы удалить все слово. Это не стандартное поведение с готовым TextBox; Я получаю символ rectangle вместо удаления слова.

Я подтвердил, что для свойства ShortcutsEnabled установлено значение True.

Я обнаружил, что могу использовать RichTextBox вместо TextBox, чтобы получить желаемое поведение. Проблема в том, что внешний вид RichTextBox (в частности, границы) отличается от внешнего вида TextBox, и мне не нужна или не нужна возможность разметки текста.

Итак, мой вопрос: как лучше всего справиться с этой ситуацией? Есть ли какое-либо свойство в TextBox, которое мне не хватает? Или лучше использовать RichTextBox, обновить внешний вид, чтобы он был согласованным, и отключить разметку текста?

Я с радостью пишу код для обработки событий KeyDown и KeyPress, если нет лучшего способа, но подумал, что стоит сначала проверить.

Ответы [ 11 ]

0 голосов
/ 24 мая 2013

Я отвечаю в VB, а не в C #, потому что я искал это решение в VB, но не смог найти его, но эти ответы на C # помогли мне разобраться: -D

Создать этот саб в модуле

Public Sub ctrl_bksp(ByRef t As TextBox)
    Dim ss As Integer = t.SelectionStart
    Dim sl As Integer = t.SelectionLength
    Dim tl As Integer = t.TextLength

    '//Split either side of selection start
    Dim strPre As String = Strings.Left(t.Text, tl - (tl - ss))
    Dim strPost As String = Strings.Right(t.Text, tl - ss - sl)

    '//Get Last Space Location in StrPre
    Dim s As Integer = Strings.InStrRev(RTrim(strPre), " ")

    strPre = Strings.Left(strPre, s)

    t.Text = strPre & strPost
    t.SelectionStart = s
End Sub

Затем вы можете вызвать эту подпрограмму из события KeyPress любого текстового поля:

Private Sub Textbox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles Textbox1.KeyPress
    Select Case e.KeyChar
        Case Chr(127)   '//Ctrl+Backspace
            e.Handled = True
            Call ctrl_bksp(Textbox1)
    End Select
End Sub

Это будет работать независимо от того, где выделение находится внутри строки, и независимо от того, выделен текст или нет, и отвечает великолепно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...