自动完成功能vb实现

来源:互联网 发布:tizen软件 编辑:程序博客网 时间:2024/04/30 19:34

自动完成功能,vb实现

最近应某人要求,希望能用vb6实现自定义数据的自动完成功能,看了下相关文章,摸索了下,算是完成了.

首先需要引用两个库,http://www.mvps.org/emorcillo/download/vb6/tl_ole.zip

新建工程,添加一个class,命名为cCusAuto

填入如下代码
'---------------------------------------------------------------------------------------
' Module    : cCusAuto
' DateTime  : 2006-5-10 21:40
' Author    : lingll
' email     : lingll_xl@163.com
' Purpose   :
'---------------------------------------------------------------------------------------

Option Explicit

Implements olelib2.IEnumString

Private m_Str() As String
Private m_cnt As Long

Private m_pos&

'---------------------------------------------------------------------------------------
' Procedure : IniMe
' DateTime  : 2006-5-10 21:40
' Author    : lingll
' email     : lingll_xl@163.com
' Purpose   : 初始化,将数据添加进列表
'---------------------------------------------------------------------------------------
'
Public Sub IniMe()
Dim i&
m_cnt = 10
ReDim m_Str(0 To m_cnt - 1)
For i = 0 To m_cnt - 2
    m_Str(i) = "auto" & Str$(i)
Next i
m_Str(m_cnt - 1) = "wahaha"
End Sub


Private Sub IEnumString_Clone(ppenum As olelib2.IEnumString)

End Sub

Private Sub IEnumString_Next(ByVal celt As Long, rgelt As Long, pceltFetched As Long)
Debug.Print celt
If m_pos < m_cnt Then
    rgelt = StrPtr(m_Str(m_pos))
    m_pos = m_pos + 1
    pceltFetched = 1
Else
    pceltFetched = 0
    Err.Raise S_FALSE
End If
End Sub

Private Sub IEnumString_Reset()
m_pos = 0
End Sub

Private Sub IEnumString_Skip(ByVal celt As Long)
m_pos = m_pos + celt
End Sub

在窗体中添加一个textbox,然后填入如下代码
Option Explicit

Private Const CLSIDSTR_AutoComplete As String = _
    "{00BB2763-6A77-11D0-A535-00C04FD7D062}"
Private CLSID_AutoComplete As UUID
Private IID_IUnknow As UUID


Private m_auto As olelib.AutoComplete
Private m_CusAuto As cCusAuto

Private Sub Form_Load()

Dim tun As olelib.IUnknown

Set m_CusAuto = New cCusAuto
m_CusAuto.IniMe


Call CLSIDFromString(IIDSTR_IUnknown, IID_IUnknow)
Call CLSIDFromString(CLSIDSTR_AutoComplete, CLSID_AutoComplete)

CoCreateInstance CLSID_AutoComplete, Nothing, CLSCTX_INPROC_SERVER, IID_IUnknow, tun

Set m_auto = tun
'设置自动完成选项
m_auto.SetOptions ACO_AUTOSUGGEST
m_auto.Init Text1.hWnd, m_CusAuto, vbNullString, vbNullString
m_auto.Enable 1
End Sub

运行程序,在textbox中输入"w",或"a",都会出现下拉列表
程序截图


参考文章:
在应用程序中集成自动完成功能(http://dev.csdn.net/develop/article/20/20944.shtm)
Using Autocomplete(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_int/shell_int_programming/ac_ovw.asp)


lingll
lingll_xl@163.com
blog.csdn.net/lingll
2006-5-10


注:经测试该程序只能在ide中运行,编译为exe,运行就会出错,目前没解决办法,极度怀疑是vb本身的问题.