模拟IE地址栏的TextBox小控件
记得CSDN上面以前曾经有人问过,有没有像IE地址栏那样能够自动记忆以前输入过的文字,然后通过下拉列表选择的控件。我的印象是.NET没有提供这样的控件,众多.NET高人肯定做过,但是我一时找不到。这几天无聊,于是自己试着做了一个。
主控件是一个继承自TextBox的类,然后一个成员控件ListBox。一个ArrayList保存了所有用户曾经在这个TextBox里面输入过的内容。
Public Class ComboTextBox
Inherits Windows.Forms.TextBox
Private WithEvents lbInput As System.Windows.Forms.ListBox
Private m_ComboList As ArrayList
End Class
TextBox.Enter的时候,自动显示ListBox,并且根据用户在TextBox里面已经输入的内容查找ArrayList里面的项目,通过String.StartWith方法提取符合的项目,然后添加到ListBox里面。(如果TextBox里面没有任何文字,就全部显示所有的ArrayList里面的内容)
For Each item In Me.m_ComboList
If item.ToLower.StartsWith(header.ToLower) = True Then
Me.lbInput.Items.Add(item)
End If
Next
TextBox.Validated的时候,将用户输入到TextBox里面的文字作为合法的输入文字添加到ArrayList里面去。同时隐藏ListBox。
这个小控件是一时高兴做的,所以没有特别全面的测试。我把源代码放上来,欢迎园子里面的哥哥姐姐们给我指点指点。如果您有什么更好的想法,非常欢迎Feedback。
源代码和Sample合并在一个Solution里面下载