【问题标题】:Visual Studio AutoComplete simulates enter being pressed when selectingVisual Studio AutoComplete 模拟在选择时按下 Enter
【发布时间】:2009-12-16 04:17:25
【问题描述】:

Visual Studio 很好地为文本框和组合框提供了内置的自动完成功能。我正在使用自动完成的建议方法,该方法根据用户的类型为用户提供选择过滤器列表。我遇到的问题是,当用户(通过鼠标)进行选择时,VS 将选定的文本放入文本框中,并模拟在文本框上按下回车键。

在我的程序中,enter keyup 事件用于将在文本框中输入的文本发送到 COM 端口。为了让它按需要工作,用户必须能够选择一个自动完成选项,然后添加到它,以便他们可以更改设置。

是否可以阻止它触发该事件或拦截它?我不确定是否有可能或如何确定按键的来源。

这里是 KeyUp 和 KeyPress 事件的代码:

    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

自动完成功能是通过控件的属性实现的,唯一的代码就是生成自动完成列表。

提前感谢您的帮助。

附:我正在使用 VB.net,但如有必要,我可以弄清楚如何将其从另一种 .net 语言转换为 VB

【问题讨论】:

    标签: vb.net visual-studio-2008 autocomplete


    【解决方案1】:

    经过研究,我无法找到一种标准方法来执行您想做的事情,而无需覆盖内置 AutoComplete 的功能。

    您必须为文本框创建自己的 AutoComplete 类,并且不要像通常在下面的示例代码中那样为传统的 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 有一个很好的custom AutoComplete TextBox in C# 示例。祝你好运。

    【讨论】:

    • 问题是我根本不希望它发送到 COM 端口。当在文本框中按下回车键时,它被发送到 COM 端口。它不是简单地将 CR LF 附加到字符串,而是模拟按下的 enter 键。
    • 我已经发布了一些代码并编辑了我的问题,我希望这会给你更多的启发。
    • 我正在运行您的代码 - 那么您是希望在通过键盘敲击时发送 enter 还是只希望在使用鼠标时发送它?
    • 我只希望在用户实际按下回车键时发送回车。
    • 感谢您的帮助。我同意,如果不自己动手,很可能没有办法做到这一点。所以,这就是我要做的,那篇 CodeProject 文章看起来非常好,所以我会研究它。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2019-03-10
    • 2017-04-29
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多