2015-04-21 20 views
1

CTabFolder中,我想在用户可以从一个标签页切换到另一个标签页之前检查未保存数据的内容。 SWT不提供PreSelection事件,如here所述。在切换标签页之前验证CTabFolder

我发现了一个workaround,建议在触发选择时切换回旧选项卡,验证数据,然后再次执行所需的切换(如果数据有效)。

我明白这个解决方法的总体思路,但是,它不适合我。 oldPageIndexnewPageIndex始终具有相同的值,尽管我没有点击相同的选项卡。

this.tabContainer.addSelectionListener(new SelectionAdapter() { 
    @Override 
    public void widgetSelected(SelectionEvent event) { 
     int oldPageIndex = tabContainer.getSelectionIndex(); 
     int newPageIndex = tabContainer.indexOf((CTabItem)event.item); 

     // Here: oldPageIndex == newPageIndex 

     ... 
    } 
}); 

这是解决办法仍在工作或有什么我可能是做错了什么?或者,也许,在此期间是否有任何修复PreSelection事件?我尝试使用event.doit,但当标签已被切换时,会触发SelectionEvent

回答

1

您可以使用选择侦听器,但您发现getSelectionIndex()不会为您提供旧选项卡。所以你必须自己维护旧的标签索引。

这是Eclipse FormEditor使用的技术。

+0

好的,这就是我现在实际上正在做的事情。虽然这种解决方法有用吗?它让我感到困惑,这个其他SO帖子在2010年被接受。 – user1438038

+0

我不确定,当然FormEditor一直记得最后一页本身。 –