如何在Windows下的Notebook控件中获取用户的新页面选择?

时间:2018-08-24 16:22:54

标签: wxwidgets

在我的应用程序中,当用户对笔记本控件的一页上的数据进行了更改时,我想提示他们在切换到另一页时保存或放弃更改。我为此绑定了EVT_BOOKCTRL_PAGE_CHANGING事件,并创建了一个处理程序方法。

但是,我不知道用户正在切换到哪个页面。根据{{​​3}},

  

在Windows下,当从EVT_BOOKCTRL_PAGE_CHANGING处理程序而不是要转到的页面中调用 GetSelection()时,它将返回与 GetOldSelection()相同的值。被选中。

有解决方法吗?

3 个答案:

答案 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