调用wxHyperlinkEvent而不单击链接

call wxHyperlinkEvent without clicking on link

本文关键字:单击 链接 wxHyperlinkEvent 调用      更新时间:2023-10-16

我正在使用wxHyperLink。当用户单击链接时调用OnHyperlinkClicked(wxHyperlinkEvent&)OnHyperlinkClicked()有助于在两个屏幕之间切换。我想显式地调用这个函数,而不需要用户交互
我使用以下代码:

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
}

这是实现我目标的正确方式吗?还是我必须使用不同的东西?

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

我最好忘记EVENT_TABLES,转而使用动态事件处理。使用Bind()可以为您提供更多功能。

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

但问题是,为什么要使用wxHyperlinkCtrl来执行屏幕切换之类的任务?是否还要启动默认浏览器?