调用wxHyperlinkEvent而不单击链接

时间:2018-07-16 09:07:18

标签: c++ hyperlink wxwidgets

我正在使用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
}

这是实现我的目标的正确方法吗?还是我必须使用其他东西?

1 个答案:

答案 0 :(得分:1)

该代码不正确是正确的,因为使用EVENT_TABLE您正在设置一个不存在的处理程序。
当用户单击控件时,将触发事件,并且静态表将调用UserRegistrationFrame::OnAuthCodeOptionLinkClicked,而不是MyClass::OnAuthCodeOptionLinkClicked

我最好忘记EVENT_TABLES并选择selectedOptions[0]。使用Bind()可为您提供更多功能。

现在,您想直接调用事件处理函数,而不是来自用户操作。然后,您需要创建一个事件,仅将其传递给处理程序。这就是您在MyClass::MyFunction()中所做的,对吧?
不要混工作。如果您的直接调用和事件处理程序都使用一个共同的功能,请将其放在其他函数中,然后直接或从事件处理程序中调用它。

但是问题是为什么您要使用wxHyperlinkCtrl来完成屏幕切换之类的任务?您是否还希望启动默认浏览器?

相关问题