1

在我的应用程序中,我希望用户在离开选项卡之前保存任何更改(实现为CTabFolder)。

我试图处理SelectionEvent,但它在选项卡更改触发(那么为什么它甚至有一个doit字段?它会在更改其他一些控件之前触发吗?)

查看 Bugzilla,我发现https://bugs.eclipse.org/bugs/show_bug.cgi?id=193453https://bugs.eclipse.org/bugs/show_bug.cgi?id=193064都没有这是固定的。

由于此要求可能很常见,因此有人有解决方法吗?

4

1 回答 1

1

我有一个适用于 org.eclipse.ui.part.MultiPageEditorPart 的解决方法,它由 CTabFolder 支持。我会将它改编为直接的 CTabFolder 实现。

首先使用选择监听器:

tabFolder.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
        pageChange(tabFolder.indexOf((CTabItem) e.item));
    }
});

然后我像这样实现 pageChange():

protected void pageChange(int newPageIndex) {
    boolean changingPages = this.changingPages;
    this.changingPages = true;
    int oldPageIndex = tabFolder.getSelectionIndex();

    if (isDirty() && !changingPages) {
        tabFolder.setSelection(oldPageIndex);

        if (canChangePages()) {
            tabFolder.setSelection(newPageIndex);
        }
    }

    this.changingPages = false;
}

在 canChangePages() 中,我弹出一个你想保存对话框并让用户有机会选择是、否或取消。Yes 保存信息并返回 true。No 将信息恢复到上次保存的状态并返回 true。Cancel 只返回 false。您可能只是想尝试保存并仅在保存失败时返回 false。

在调用 canChangePages() 之前切换回旧页面可能看起来很奇怪。这个调用执行得很快,所以它给人一种标签从未切换过的错觉。无论 canChangePages() 花费多长时间,用户都不会看到选项卡更改,除非它得到该方法的批准。

于 2010-06-04T19:59:07.587 回答