C++ 事件(焦点)处理

标签 c++ event-handling wxwidgets wxtextctrl

由于评论,我添加了以下代码

(在基本面板中)

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 对于这两个事件,我都找不到任何片段。谁能给我一个简短的例子或引导我到一个有用的页面?

Q2:我是否必须创建一个事件来处理 8 个 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/

相关文章:

wxpython - 如何在 wxpython 中将小部件添加到文件对话框?

c++ - Hunt the Wumpus - 房间连接

c++ - unordered_map C++

c++ - 将 -m32 参数添加到 Makefile 命令

javascript - 处理事件后将颜色放入元素中

java - 将 JPanel 制作成 JOptionPane.OK_OPTION

C++ 中的 Java 样式引用返回

javascript - 在JavaScript事件处理中,为什么 "return false"或 "event.preventDefault()"和 "stopping the event flow"会有区别?

c++ - 如何用这样的正则表达式检查 wxString

c++ - 我什至无法使用 wxWidgets 示例进行编译