2012-04-03 115 views
0

我正在處理WinForms TabControl的取消選擇事件中的選項卡更改。但是,在某些情況下,我正在刪除我在切換到它之前單擊的選項卡。如何取消TabControl的選擇事件

場景

我有標籤1和標籤2 目前我在標籤1 是我點擊選項卡2 標籤1取消選擇事件在OnPaint中 崩潰將刪除選項卡集選項卡2,因爲它試圖轉到不再存在的選項卡。 (ArgumentOutOfRangeException)。它在碰到選擇事件之前崩潰。

我不想看看tabcount在取消選擇中是否發生了變化,因爲我只想取消選擇了我將不再存在的選項卡。

任何幫助將不勝感激。

private void TabControl_Deselecting(object sender, TabControlCancelEventArgs) { 
     DoSomeWork(); 
    } 

假設DoSomeWork刪除了我點擊的Tab。我如何知道它是否刪除了我打算去的標籤?

+0

你能否澄清一點問題以及期望的結果是@fahed。無法理解你想要的東西。 – ImGreg 2012-04-03 20:50:48

+0

您需要重新考慮您的用戶界面。這聽起來太混亂,難以使用。 – BoltBait 2012-04-03 21:03:00

+0

Tab刪除是3或4功能深,誰有點超過頂部。您是否對商業對象進行「綁定」控制並將所有邏輯放入業務對象中?這個GUI的功能聽起來很不直觀。 – 2012-04-04 03:20:02

回答

1

無再現。這個場景很奇怪,但我無法讓它崩潰。確保您取消取消選擇。

private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e) { 
     if (e.TabPageIndex == 0 && tabControl1.TabCount > 1) { 
      tabControl1.TabPages[1].Dispose(); 
      e.Cancel = true; 
     } 
    } 
+0

讓我看看如何在取消選擇中將e.cancel設置爲true。那將解決這個問題。 – fbhdev 2012-04-03 21:07:54

+0

問題在於代碼清除是在代碼深處的3或4個函數 – fbhdev 2012-04-03 21:08:41

+1

不管你在做什麼,它從這裏是完全不可見的,你做錯了。你需要更好地記錄你的問題,需要重現問題的片段。 – 2012-04-03 21:19:18

0

一個附帶在我腦海中可能的解決方案:

,如果你確信Tab1取消事件之前Tab2選擇引發的事件,我想嘗試,申報我的自定義標籤控件並重寫它的OnPaintMethod,像這

public class MyCustomTab : TabItem 
{ 
    ... 


    protected override OnPaint(....) 
    { 
     if(this.Parent == null) return; 

     base.Paint(...); 
    }  
} 

清除,爲您的TabControl你應該添加該類型的TabItems。