Combobox 自动补全

 Private Sub ComboBox1_KeyUp(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyUp
        AutoCompleteKeyUp(ComboBox1, e)
    End Sub

    Public Sub AutoCompleteKeyUp(ByVal Combo As ComboBox, ByVal e As KeyEventArgs)
        Dim strTyped As String
        Dim intFoundIndex As Integer
        Dim objFoundItem As Object
        Dim strFoundText As String
        Dim strAppendText As String
        '忽略这些基本操作键
        Select Case e.KeyCode
            Case Keys.Back, Keys.Left, Keys.Right, Keys.Up, _
                Keys.Delete, Keys.Down, Keys.CapsLock
                Return
        End Select
        '看看用户输入了些什么
        strTyped = Combo.Text
        intFoundIndex = Combo.FindString(strTyped)
        '如果找到了的话……
        If intFoundIndex >= 0 Then
            '获取Combo下的匹配项
            objFoundItem = Combo.Items(intFoundIndex)
            '获取匹配的字符串
            strFoundText = Combo.GetItemText(objFoundItem)
            '开始自动添加文本
            strAppendText = strFoundText.Substring(strTyped.Length)
            Combo.Text = strTyped & strAppendText
            '选亮添加的文本
            Combo.SelectionStart = strTyped.Length
            Combo.SelectionLength = strAppendText.Length
        End If
    End Sub

在Windows环境下使用C++开发时,ComboBox控件的自动补全功能通常是通过组合框(ComboBox)的自定义行为实现的。如果你希望取消ComboBox自动补全功能,可以通过设置组合框的样式或处理相应的消息来实现。 具体步骤如下: 1. **设置样式**:如果你使用的是原生Windows控件(如MFC中的CComboBox),可以通过设置组合框的样式来关闭自动完成。例如,在MFC中,可以设置组合框为`CBS_DROPDOWN`或`CBS_DROPDOWNLIST`样式,这样组合框将不会自动显示输入的文本,而只是显示下拉列表。 ```cpp // 假设m_ComboBox是CComboBox类型的成员变量 m_ComboBox.SetWindowText(_T("")); // 清空当前输入的文本 m_ComboBox.ModifyStyle(CBS_AUTOHSCROLL | CBS_DROPDOWNLIST, CBS_DROPDOWNLIST); ``` 2. **处理消息**:通过处理`CB_SIMPLE`消息也可以关闭自动补全功能。不过,通常情况下,使用样式设置更为直接和常见。 3. **阻止自动完成**:在某些情况下,你可能需要在运行时动态阻止自动完成功能,可以通过重写消息处理函数来实现。例如,可以通过处理`WM_NOTIFY`消息来判断并修改自动生成的自动完成字符串。 ```cpp // 假设处理的是CBN_EDITUPDATE通知代码 LRESULT CALLBACK MyComboBoxProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if (message == CBN_EDITUPDATE) { // 获取组合框的编辑句柄 HWND hwndEdit = GetDlgItem(hWnd, 0); // 0通常是编辑控件的子控件ID // 修改编辑控件的样式或行为来阻止自动补全 // ... } // 调用默认的消息处理函数 return DefWindowProc(hWnd, message, wParam, lParam); } ``` 请注意,具体代码实现可能会根据你使用的库和开发环境有所不同。上述代码仅为示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值