由于评论,我添加了以下代码
(在基本面板中)
Connect(CTRL_ONE, wxEVT_KILL_FOCUS, (wxObjectEventFunction)&BasicPanel::OnKillFocus);
Connect(CTRL_TWO,wxEVT_KILL_FOCUS, (wxObjectEventFunction)&BasicPanel::OnKillFocus);
Connect(CTRL_THREE, wxEVT_KILL_FOCUS, (wxObjectEventFunction)&BasicPanel::OnKillFocus);
Connect(CTRL_FOUR, wxEVT_KILL_FOCUS, (wxObjectEventFunction)&BasicPanel::OnKillFocus);
Connect(CTRL_FIVE, wxEVT_KILL_FOCUS, (wxObjectEventFunction)&BasicPanel::OnKillFocus);
(枚举)
CTRL_NAME = wxID_HIGHEST + 5, // 6004
CTRL_ADDRESS = wxID_HIGHEST + 6, // 6005
CTRL_PHONENUMBER = wxID_HIGHEST + 7, // 6006
CTRL_SS = wxID_HIGHEST + 8, // 6007
CTRL_EMPNUMBER = wxID_HIGHEST + 9 // 6008
(OnKillFocus 函数 - 按照建议包含声明)
void BasicPanel::OnKillFocus(wxFocusEvent& event) {
switch (event.GetId()) {
case 6004:
...
break;
... ... ...
}
当用户将焦点更改为他们正在使用的文本框时,添加到代码中的所有这些都不会执行任何操作...
Q1:我正在使用wxWidgets(C++)并且遇到了一个问题,我找不到任何帮助。我创建了几个 wxTextCtrl 框,并希望程序在用户“取消焦点”时更新其中的简单计算。我在 wxWidgets 网页上找不到任何关于这个主题的文档,谷歌搜索只找到了 wxPython。我发现的两个事件是: EVT_COMMAND_KILL_FOCUS - EVT_KILL_FOCUS
对于这两个事件,我都找不到任何片段。谁能给我一个简短的例子或引导我到一个有用的页面?
wxTextCtrl
框的焦点被杀死的情况?如果我必须创建一个不同的事件:我如何让每个事件彼此区分?我知道我必须为每个 wxTextCtrl
框创建新的 wxID,但如何才能触发正确的 wxID?
class BasicPanel : public wxPanel { ...
wxTextCtrl* one;
wxTextCtrl* two;
wxTextCtrl* three;
wxTextCtrl* four; ... }
最佳答案
好的,首先,这是要放入 BasicPanel
类中的代码:
void OnKillFocus(wxFocusEvent& event);
然后将以下内容添加到 BasicPanel
构造函数的末尾:
Connect(ID_TEXTCTRL,
wxEVT_KILL_FOCUS ,
(wxObjectEventFunction)&BasicPanel::OnKillFocus);
您需要对每个文本控件重复上述代码,并将 ID_TEXTCTRL
替换为控件的实际 ID。
然后,只要其中一个控件失去焦点,就会调用下面的代码。
void BasicPanel::OnKillFocus(wxFocusEvent& event)
{
// code goes here...
}
要确定在 OnKillFocus
中生成事件的控件的 ID,您可以使用以下命令:
event.GetId()
关于C++ 事件(焦点)处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2679979/