【问题标题】:WXWidgets Event ArgumentsWXWidgets 事件参数
【发布时间】:2012-12-14 01:58:24
【问题描述】:

我正在尝试在 WXWidgets 中设置一个带有按钮网格的窗口。这些按钮中的每一个都将打开另一个窗口。现在我知道我可以通过根据按下的按钮在单独的函数中调用每个窗口来做到这一点。但这似乎有点低效。

我想要做的是让这些按钮中的每一个在单击时调用相同的函数,但传递一个 ID,该 ID 将用于确定打开哪个窗口。

我使用的基本代码如下(位被剥离,我有一个关闭应用程序的按钮,只是为了测试按钮)

Simple::Simple(const wxString& title, int x, int y)
       : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(x,y))
{

    wxPanel  *testPanel  = new wxPanel(this,wxID_ANY, wxDefaultPosition,wxSize(270, 150));
    wxButton *testButton = new wxButton(testPanel, wxID_EXIT, wxT("Actors"), wxPoint(20,20));
    Connect(wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Simple::eventWindowCall));
    testButton->SetFocus();

    Centre();
}

void Simple::eventWindowCall(wxCommandEvent & WXUNUSED(event))
{
    Close(true); //just a line to make sure this function is being called
}

我已经尝试在使用连接时使用数字代替事件 ID,但如果我这样做,按钮的函数不会被调用。理想情况下,我可以只做类似 wxCommandEventHandler(Simple::eventWindowCall(26)) 的事情,并在 eventWindowCall 函数中放置一个 case 语句,该语句将根据传递的数字显示正确的窗口。但到目前为止,这种方法也没有效果。

您能提供的任何建议都会很棒。感谢您阅读本文。我已经研究了好几个小时。

【问题讨论】:

    标签: c++ wxwidgets


    【解决方案1】:

    int wxEvent::GetId() const

    返回与此事件关联的标识符,例如按钮命令 id。

    您可以从传递给函数的wxCommandEvent中获取与事件相关的控件ID:

    void eventWindowCall(wxCommandEvent& event) {
        event.GetId(); // <-
    }
    

    这将为您提供被按下按钮的 ID,在您的情况下为 wxID_EXIT(因为这是您分配给按钮的 ID):

    new wxButton(testPanel, wxID_EXIT
    //                      ^^^^^^^^^ this will be passed as event id
    

    有关详细信息,请参阅wxCommandEvent 及其基类wxEvent 的文档。

    【讨论】:

    • 好吧,亲爱的。这样可行。我只需要为每个按钮提供它自己的 ID 并在 Connect 函数中进行如下设置 Connect(1, wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Simple::eventWindowCall)); Connect(2, wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Simple::eventWindowCall));谢谢你的帮助^.^我删除了我之前的评论,因为我误解了你告诉我的事情。谢谢 ^.^ 没有你我也想不通。
    • @Legacyblade 实际上,Connect(wxID_ANY,...) 会将处理程序连接到与事件匹配的所有(任何)ID(在您的情况下单击按钮)。您不必连接每个按钮 ID。
    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多