Visual Studio AutoComplete имитирует нажатие клавиши ввода при выборе - PullRequest
1 голос
/ 08 декабря 2009

Visual Studio предоставляет встроенные функции автозаполнения для текстовых и комбинированных полей. Я использую предложенный метод автозаполнения, который предоставляет пользователю список фильтров по типу. У меня проблема в том, что когда пользователь делает выбор (с помощью мыши), VS помещает выделенный текст в текстовое поле, а также имитирует нажатие клавиши ввода в текстовом поле.

В моей программе событие enter keyup используется для отправки текста, введенного в текстовое поле, в COM-порт. Чтобы это работало как нужно, пользователь должен иметь возможность выбрать параметр автозаполнения, а затем добавить его, чтобы они могли изменять настройки.

Можно ли остановить его от запуска этого события или перехватить его? Я не уверен, возможно ли это или как определить происхождение нажатия клавиши.

Вот код для KeyUp, даже для KeyPress Event:

    Private Sub txtInput_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtInput.KeyPress
    If e.KeyChar = Chr(13) Then
        e.Handled = True
    End If
End Sub

Private Sub txtInput_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtInput.KeyUp

    If e.KeyValue = Keys.Enter Then

        If txtInput.Text.ToLower = "cls" Or txtInput.Text.ToLower = "clr" Or txtInput.Text.ToLower = "clear" Then
            txtOutput.Text = ""
        Else
            If SerialPort1.IsOpen Then
                SerialPort1.Write(txtInput.Text)
            Else
                MsgBox("The serial port is not open")
            End If
        End If

        txtInput.Text = ""

        e.Handled = True
        e.SuppressKeyPress = True

    End If
End Sub

Функция автозаполнения была реализована через свойства элемента управления, единственным кодом для которого было генерирование списка автозаполнения.

Заранее спасибо за любую помощь.

P.S. Я использую VB.net, но при необходимости я могу выяснить, как получить его с другого языка .net на VB

1 Ответ

1 голос
/ 14 декабря 2009

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

Вам придется создать свой собственный класс AutoComplete для текстовых полей и просто не реализовывать MouseEventHandler, как это обычно делается в примере кода ниже для традиционного списка автозаполнения:

private void List_MouseDown(object sender, MouseEventArgs e)
{

    for (int i=0; i<this.list.Items.Count; i++)
    {
    if (this.list.GetItemRectangle(i).Contains(e.X, e.Y))
    {
        this.list.SelectedIndex = i;
        this.SelectCurrentItem();
    }
    }
    this.HideList();
}

CodeProject имеет хороший пример пользовательского автозаполнения TextBox в C # . Удачи.

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