在切换选项卡之前验证 CTabFolder
Validate CTabFolder before switching tabs
在 CTabFolder
中,我想在用户从一个选项卡切换到另一个选项卡之前检查未保存数据的内容。如 here.
所述,SWT 不提供 PreSelection 事件
我找到了一个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
在选项卡已经切换时被触发了。
您可以使用选择侦听器,但您发现 getSelectionIndex()
没有为您提供旧选项卡。所以你将不得不自己维护旧的标签索引。
这是 Eclipse 使用的技术 FormEditor
。
在 CTabFolder
中,我想在用户从一个选项卡切换到另一个选项卡之前检查未保存数据的内容。如 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
在选项卡已经切换时被触发了。
您可以使用选择侦听器,但您发现 getSelectionIndex()
没有为您提供旧选项卡。所以你将不得不自己维护旧的标签索引。
这是 Eclipse 使用的技术 FormEditor
。