首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Builder 建立自動完成下拉方塊

     編輯:關於C++

攔截 CB_FINDSTRING/CB_SETEDITSEL 訊息實現輸入時自動匹配下拉項目

標準 TComboBox 於 OnChange 發送 CB_FINDSTRING 尋找匹配項目,若找到則發送 CB_SETEDITSEL 選取剩餘字元,形成自動完成效果。需配合 OnKeyDown 記錄按鍵避免 Delete/Backspace 觸發誤動作。

介面配置

  • TComboBox (Name=ComboBox1) Items 加入範例字串。
  • 標頭檔私有變數:WORD LastKey;

OnChange 事件

void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
    String value = ComboBox1->Text;
    if (LastKey == VK_BACK || LastKey == VK_DELETE) { // 忽略刪除鍵
        LastKey = 0; return;
    }
    LastKey = 0;
    if (ComboBox1->SelStart != value.Length()) return; // 游標不在尾端不處理

    int index = SendMessage(ComboBox1->Handle, CB_FINDSTRING, -1,
        (LPARAM)value.c_str());
    if (index >= 0) {
        ComboBox1->ItemIndex = index;
        SendMessage(ComboBox1->Handle, CB_SETEDITSEL, 0,
            MAKELPARAM(value.Length(), -1)); // 選取輸入後剩餘部分
    }
}

OnKeyDown 事件

void __fastcall TForm1::ComboBox1KeyDown(TObject *Sender, WORD &Key,
    TShiftState Shift)
{
    LastKey = Key;
}

效果

使用者輸入 "Chi" 即自動補全為 "China" 並反白 "na" 部分,繼續輸入可替換反白部分。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved