【问题标题】:WxWidgets same handler for lots of buttons/controls用于许多按钮/控件的 WxWidgets 相同的处理程序
【发布时间】:2012-03-01 15:19:11
【问题描述】:

我有一个带有很多标签的控制系统。他们每个人都有许多按钮和文本控件。我希望有一个事件处理程序来执行相同的代码但对不同的文本控件。

例如,10 个文本控件具有 IP 值。我想使用相同的事件处理函数而不是 10 个事件和 10 个处理程序,但它们需要指向每个事件生成对象:

void anyname::OnCheckIP(wxCommandEvent& event)
{
   // code to check IP value for the caller text control
}

¿我该怎么做? ¿ 甚至可以在事件处理程序中恢复调用者对象指针吗?

【问题讨论】:

    标签: wxwidgets handlers


    【解决方案1】:

    您可以对正在使用的控件进行子类化,捕获生成的事件,并调用方法来处理新类中的事件。然后,您将这个新控件用于需要相同处理程序的所有小部件。

    假设你有很多 wxTextCtrls

    class cMyCommonTextCtrl : public wxTextCtrl
    {
       int myID;
    public:
        cMyCommonTextCtrl( int ID, ... )
        : wxTextCtrl( ... ),
        , myID( ID )
        ...
      {
        bind(  wxEVT_TEXT_ENTER, &cMyCommonTextCtrl::OnCheckIP, this, myID );
        ...
      }
        void OnCheckIP( wxCommandEvent& )
        {
            // handle text, using myID attribute to distinguish which one
        }
    };
    

    【讨论】:

    • 谢谢,但是如何用ID区分每一个呢?我需要做一个开关/外壳吗?如果存在 getobject(ID) 那就太好了!
    • switch 语句是执行此操作的常用方法。如果您愿意,可以添加 getobject() 方法,但如果它仅在 OnCheckIP 中使用,则没有必要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 2018-05-08
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多