我正在使用wxHyperLink
。当用户单击链接时,将调用OnHyperlinkClicked(wxHyperlinkEvent&)
。 OnHyperlinkClicked()
有助于在2个屏幕之间切换。我想显式调用此函数-无需用户交互。
我为此使用了以下代码:
BEGIN_EVENT_TABLE(UserRegistrationFrame, wxFrame)
EVT_HYPERLINK(wxID_ANY, UserRegistrationFrame::OnAuthCodeOptionLinkClicked)
END_EVENT_TABLE()
void MyClass::MyFunction()
{
wxHyperlinkEvent event;
OnAuthCodeOptionLinkClicked(event);
}
void MyClass::OnAuthCodeOptionLinkClicked(wxHyperlinkEvent& event)
{
// code to switch
}
这是实现我的目标的正确方法吗?还是我必须使用其他东西?
答案 0 :(得分:1)
该代码不正确是正确的,因为使用EVENT_TABLE您正在设置一个不存在的处理程序。
当用户单击控件时,将触发事件,并且静态表将调用UserRegistrationFrame::OnAuthCodeOptionLinkClicked
,而不是MyClass::OnAuthCodeOptionLinkClicked
我最好忘记EVENT_TABLES并选择selectedOptions[0]
。使用Bind()
可为您提供更多功能。
现在,您想直接调用事件处理函数,而不是来自用户操作。然后,您需要创建一个事件,仅将其传递给处理程序。这就是您在MyClass::MyFunction()
中所做的,对吧?
不要混工作。如果您的直接调用和事件处理程序都使用一个共同的功能,请将其放在其他函数中,然后直接或从事件处理程序中调用它。
但是问题是为什么您要使用wxHyperlinkCtrl
来完成屏幕切换之类的任务?您是否还希望启动默认浏览器?