在我的应用程序中,当用户对笔记本控件的一页上的数据进行了更改时,我想提示他们在切换到另一页时保存或放弃更改。我为此绑定了EVT_BOOKCTRL_PAGE_CHANGING
事件,并创建了一个处理程序方法。
但是,我不知道用户正在切换到哪个页面。根据{{3}},
在Windows下,当从
EVT_BOOKCTRL_PAGE_CHANGING
处理程序而不是要转到的页面中调用 GetSelection()时,它将返回与 GetOldSelection()相同的值。被选中。
有解决方法吗?
答案 0 :(得分:3)
我想作为一种解决方法,您可以使用鼠标处理程序来检查单击左键的时间。在该事件的处理程序中,您可以进行点击测试,以查看单击的位置并存储单击的选项卡的值。像这样:
void MyFrame::OnLeftDown( wxMouseEvent& event )
{
long flags;
int ht = m_notebook1->HitTest( wxPoint(event.GetX(),event.GetY()), &flags);
if( (flags & wxBK_HITTEST_NOWHERE) == 0 )
{
//store the value of ht somewhere
}
event.Skip();
}
void MyFrame::OnNotebookPageChanging( wxNotebookEvent& event )
{
//use the stored value of ht here
}
答案 1 :(得分:3)
在Windows下,GetSelection()将返回与相同的值 从EVT_BOOKCTRL_PAGE_CHANGING调用时,GetOldSelection() 处理程序,而不是要选择的页面。
因此,请从EVT_BOOKCTRL_PAGE_CHANGED调用GetSelection以获取新页面。
答案 2 :(得分:2)
不,没有解决方法(如果有可靠的方法,wxWidgets应该已经在做),底层本机控件根本不提供此信息。
您可以在任何情况下都可以询问用户,无论他们要切换到哪个页面,也可以询问他们,也可以在用户切换后询问他们-当然,这看起来很奇怪如果您随后决定退回去。
如果确实需要此功能,则可以改用非本地wxAuiNotebook
。