wxWidgets 2.9在wxComboBox自定义EnterEvent中自动完成
wxWidgets 2.9 AutoComplete in wxComboBox custom EnterEvent
我有一个关于wxWidgets 2.9和wxComboBox自动完成功能的问题。下面是我的事件表,它接受我的组合框的ENTER事件,在输入时我启动OnComboEnter。如果我这样做,我将无法从"自动完成"列表中选择项目,因为它直接对用户在组合框中键入的文本执行OnComboEnter方法。
BEGIN_EVENT_TABLE(LVFilterPanel, wxPanel)
EVT_TEXT_ENTER(wxID_ANY, LVFilterPanel::OnComboEnter)
EVT_CONTEXT_MENU(LVFilterPanel::OnComboContextMenu)
END_EVENT_TABLE()
我的组合框声明如下:
mFilterString = new wxComboBox(this, LV_FILTER_STRING, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, 0, wxTE_PROCESS_ENTER);
AutoComplete使用wxWidgets 2.9:中的默认AutoComplete方法完成
mFilterString->AutoComplete(historyarr);
historyarr是一个wxArrayString,其中填充了用户以前键入的字符串。OnComboEnter方法如下所示:
void LVFilterPanel::OnComboEnter(wxCommandEvent& event) {
wxCommandEvent ce(wxEVT_COMMAND_BUTTON_CLICKED, LV_FILTER);
static_cast<wxButton*>(FindWindow(LV_FILTER))->Command(ce);
}
我现在的问题是,我如何改变事件处理,使其能够首先选择项目,然后处理OnComboEnter,这样用户就能够首先选择一个项目(或者可能根本不选择项目,直接点击回车键来启动事件和OnComboEnter方法)。提前谢谢。
贪婪,
Roin
如果您需要在标准处理发生后执行事件处理程序,通常的技巧是在事件处理程序中不执行任何操作(当然,这意味着也要调用event.Skip()
!),除了设置一些内部标志并在EVT_IDLE
处理程序中检查此标志。如果已设置,则执行所需操作(例如,在您的情况下为button->Command()
)并重置标志。
这种方法确保在事件发生后"很快"运行处理程序,而不会干扰正常的事件处理。
我遇到了同样的问题,但wxTextCtrl,这是我的解决方案:
TextCtrl2 = new wxTextCtrl(this, ID_TEXTCTRL2, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL2"));
TextCtrl2->SetHint("Search...");
TextCtrl2->AutoComplete(m_AutoCompleteChoices);
TextCtrl2->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(StartFrame::OnKeyDown),NULL, this);
void StartFrame::OnKeyDown(wxKeyEvent& event)
{
switch (event.GetKeyCode()) {
case WXK_RETURN:
QueryCache(TextCtrl2->GetValue()); // <- This is anything to do!
break;
}
event.Skip();
}
我可以使用wxSearchCtrl,但Autocomplete无法在该控件中工作,我不知道为什么。
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 跟随整数索引列表的自定义类迭代器
- 参数化自定义CMake工具链
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 如何在自定义类中启用'auto loops'?
- 使用QJsEngine在Qt中注册自定义类型
- Qt自定义QPush按钮未显示在布局上
- 自定义对象的dlib序列化在gcc中失败
- 自定义创建QFuture
- wxWidgets 2.9在wxComboBox自定义EnterEvent中自动完成