2015-04-21 21 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一直記得最後一頁本身。 –