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

CTabFolder に支えられた org.eclipse.ui.part.MultiPageEditorPart で動作する回避策があります。ストレートな 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() では、[保存しますか?] ダイアログをポップアップ表示し、ユーザーに [はい]、[いいえ]、または [キャンセル] を選択する機会を与えます。はいは情報を保存し、true を返します。No は、情報を最後に保存された状態に戻し、true を返します。Cancel は単に false を返します。単純に保存を試みて、保存が失敗した場合にのみ false を返したい場合があります。

canChangePages() を呼び出す前に古いページに戻るのは奇妙に見えるかもしれません。この呼び出しはすばやく実行されるため、タブが切り替わっていないという錯覚を与えます。canChangePages() にどれだけ時間がかかっても、そのメソッドによって承認されない限り、ユーザーはタブの変更を確認できません。

于 2010-06-04T19:59:07.587 に答える