自动完成组合框用于vb.net逐字或带分隔符

时间:2015-01-11 01:57:53

标签: vb.net autocomplete

我正在尝试逐字(和/或使用分隔符支持)自动完成功能添加到vb.net应用程序中的组合框(或文本框)。这是期望的行为,针对此问题拆分为一个分隔符:

当用户键入'调用XX'在框中,应弹出建议的单词列表。用户仍然可以输入,不断过滤这些单词,直到他/她选择一个。例如:

  

'调用121' (应提示显示,DVD,CD之类的单词列表,仍然带有输入法)

我可以处理大部分实际逻辑,但我对vb.net很新,而且我不确定在空格(或句号)上触发自动完成弹出窗口的最佳方法,单词用语言。 (常规组合框自动完成功能并不是逐字逐句支持的。)这篇文章看起来很有帮助,但我不知道如何将接受的答案的开发人员表达工具转换为常规的.net组件:{{3 }}。理想情况下,它的工作方式与intellisense非常相似。

这是我到目前为止的尝试(只是一个带有文本框的表单),被剥离了。我需要帮助找出如何允许键入来通过contextmenustrip过滤。我也想知道,除了环境因素之外,我是否会更好。感谢

   Public Class Form1

        Private WithEvents firstContextMenu As ContextMenuStrip

        ' Populate items for the contextmenustrip
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            firstContextMenu = New ContextMenuStrip()
            firstContextMenu.Items.Add("Display")
            firstContextMenu.Items.Add("DVD")
            firstContextMenu.Items.Add("CD")
        End Sub

        ' Bring up the contextmenustrip if typing a space, if after 'invoke XX '
        Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            If e.KeyChar = " " And TextBox1.Text.StartsWith("invoke ", StringComparison.CurrentCultureIgnoreCase) And TextBox1.Text.Split().Length = 2 Then
                TextBox1.Text = TextBox1.Text + " "     ' Add a space
                TextBox1.Select(TextBox1.Text.Length, 0)    ' To put the cursor at the end of the textbox
                Dim point As New System.Drawing.Point(TextBox1.GetPositionFromCharIndex(DirectCast(sender, TextBox).SelectionStart - 1).X, TextBox1.Height - 5)
                firstContextMenu.Show(TextBox1, point, ToolStripDropDownDirection.BelowRight)
            End If
        End Sub

        ' Adds the clicked item to the textbox
        Private Sub firstContextMenu_ItemClicked1(sender As Object, e As ToolStripItemClickedEventArgs) Handles firstContextMenu.ItemClicked
            TextBox1.Text = TextBox1.Text + e.ClickedItem.ToString()
            TextBox1.Select(TextBox1.Text.Length, 0)
        End Sub

        ' Moves cursor to end of textbox if you 'escape' out of the contextmenustrip
        Private Sub firstContextMenu_Closed(sender As Object, e As ToolStripDropDownClosedEventArgs) Handles firstContextMenu.Closed
            TextBox1.Select(TextBox1.Text.Length, 0)
        End Sub

    End Class

0 个答案:

没有答案