【发布时间】:2013-09-17 11:38:22
【问题描述】:
我还有一个关于事件和焦点的 wxWidgets 问题。
我已经在这里查看了教程和这个老问题,但我仍然遇到问题C++ Event (Focus) Handling
基本上我有一个包含两个 wxTextCtrl 元素和一个按钮的对话框。 我想要实现的是,当我点击按钮时,它需要告诉我两个元素中的哪一个先前具有焦点。
在我的对话框的构造函数中,我创建了所有元素,然后将它们连接到事件处理程序,如下所示:Ttop->Connect(TOP,wxEVT_KILL_FOCUS,(wxObjectEventFunction)&UI_ADDENTRY::hasfocus);
Tbottom->Connect(BOTTOM,wxEVT_KILL_FOCUS,(wxObjectEventFunction)&UI_ADDENTRY::hasfocus);
然后有一个事件处理程序可以确保 id 成为焦点
void UI_ADDENTRY::hasfocus(wxFocusEvent& event){
focus= event.GetId();
event.Skip();}
但是,当我尝试在 Button 函数中访问焦点时,它总是告诉我:0 而不是 TOP 或 BOTTOM / 我给 textcontrols 的 ids
void UI_ADDENTRY::OnRecord(wxCommandEvent &event){
wxString tmp;
tmp << this->focus;
wxMessageBox(tmp);}
我做错了什么?是否有另一种方法可以找出两个文本框中的哪一个最后成为焦点?
谢谢
【问题讨论】:
-
您不能在按钮单击处理程序中检查
Ttop->HasFocus()和Tbottom->HasFocus()吗? -
我最初尝试过...就像那样 if(Ttop->HasFocus()) { wxMessageBox("TOP"); } 但它似乎并不都是真的
-
单击按钮会从 wxTextCtrl 移除焦点。如果它设置了一个竞争条件,这将使它有理由只有时返回 true。
-
是的,你是对的。 FindFocus() 只会返回我单击的按钮的 ID,只是想知道解决方案可能是什么——当然我不能成为第一个必须处理这个问题的人——但谷歌一点帮助也没有/ wxWidgets 的文档我不清楚。