自定义 wxTextCtrl 自动完成

customize wxTextCtrl autocomplete

本文关键字:wxTextCtrl 自定义      更新时间:2023-10-16

我有一个wxTextCtrl对象并将其设置为自动完成

wxArrayString _myStringArray;
_myStringArray.push_back("abc");
_myStringArray.push_back("alpha");
_myStringArray.push_back("bnm");
_myTextCtrl->AutoComplete(_myStringArray);

我在里面输入字符"a"。然后显示一个弹出窗口,其中包含相关/建议字符串的列表(即"abc"和"alpha")。现在我按"向下箭头键"以选择一个字符串。我第一次按下按钮时,选择了"abc"字符串。第二次按下按钮时,选择了"alpha"字符串。

问题是通过按向上和向下箭头键更改字符串选择不会更改文本控件值。我希望通过按向上和向下箭头键在所选字符串更改时更新文本控件值。

我想如果我知道事件名称,我可以手动执行此操作。所以问题是:通过按向上和向下箭头键从 wxTextCtrl 中的弹出窗口更改字符串选择的事件名称(或事件宏)是什么?

谢谢

更新:我成功地通过子类化 wxTextCtrl 来捕获 KEY DOWN 事件,然后为EVT_KEY_DOWN事件添加一个事件处理程序。

void TextCtrlChild::keyHandler(wxKeyEvent& event)
{
int _keyCode = event.GetKeyCode();
if(_keyCode == 315 || _keyCode == 317){ //if UP or DOWN arrow key is pressed
//TO DO: capture the highlighted string from the popup
}
event.Skip();
}

现在的问题是如何从弹出窗口中捕获选定/突出显示的字符串?

自动完成的工作方式由系统 UI 约定决定,因此干扰它看起来不是一个好主意。如果确实希望立即进行选择,请考虑改用其他控件,例如wxChoice