【发布时间】:2018-04-09 14:53:18
【问题描述】:
我有一个 wxTextCtrl 对象并将其设置为自动完成
wxArrayString _myStringArray;
_myStringArray.push_back("abc");
_myStringArray.push_back("alpha");
_myStringArray.push_back("bnm");
_myTextCtrl->AutoComplete(_myStringArray);
我在其中输入 char '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();
}
现在的问题是如何从弹出窗口中捕获选定/突出显示的字符串?
【问题讨论】:
-
wx 版本?操作系统?
-
@igor 我正在使用 wxGTK 3.0
-
您是从存储库安装的吗?自己建造?它使用的是 GTK+2 还是 GTK+3?另外,我相信 TRUNK 中的自动完成功能得到了改进。您可以尝试编译最新的 HEAD,看看是否有所改进。