在CTabFolder
中,我想在用户可以从一个标签切换到另一个标签之前检查未保存数据的内容。 SWT不提供PreSelection事件,如here所述。
我找到了workaround,建议在触发选择时切换回旧标签,验证数据,然后再次执行所需的切换,如果数据有效。
我确实理解这种解决方法的一般概念,但是,它对我不起作用。 oldPageIndex
和newPageIndex
始终具有相同的值,但我没有点击同一个标签。
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
会被触发。
答案 0 :(得分:1)
您可以使用选择侦听器,但是您发现getSelectionIndex()
没有为您提供旧选项卡。因此,您必须自己维护旧的选项卡索引。
这是Eclipse FormEditor
使用的技术。