1

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

(在基本面板中)

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

wxTextCtrlQ2:我是否必须创建一个事件来处理我的 8 个盒子 中的每一个被杀死的焦点?如果我必须创建一个不同的事件:我如何让每个事件彼此区分开来?我知道我必须为每个wxTextCtrl盒子创建新的 wxID,但我如何才能触发正确的 wxID?

class BasicPanel : public wxPanel { ...     
    wxTextCtrl* one;
    wxTextCtrl* two;
    wxTextCtrl* three;
    wxTextCtrl* four; ... }
4

1 回答 1

3

好的,首先,这是要放入您的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...
}

要确定在 中生成事件的控件的 ID OnKillFocus,可以使用以下命令:

event.GetId()
于 2010-04-21T03:28:10.947 回答