我正在尝试逐字(和/或使用分隔符支持)自动完成功能添加到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