2012-04-03 17 views
0

WinForms TabControlの選択解除イベントでタブ変更を処理しています。しかし、場合によっては、切り替える前にクリックしたタブを削除しています。それはしようとしているのでTabControlの選択イベントをキャンセルするには

シナリオは

現在、私はタブ2 ]タブをクリックし、タブ1 にいる私は、タブ1とタブ2 を持っている1選択解除イベントは クラッシュのOnPaintでタブコレクションからタブ2を削除しますもう存在しないタブに移動します。 (ArgumentOutOfRangeException)。それは選択イベントに当たる前にクラッシュします。

タブが選択されていない場合、キャンセルする必要があるため、選択解除時にタブカウントが変更されたかどうかはわかりません。

ご協力いただければ幸いです。

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

クリックしたタブをDoSomeWorkが削除したとします。私が行っていたタブを削除したかどうかを知るにはどうすればいいですか?私の心に来る可能性のある解決策の

+0

質問をもう少し明確にして、希望の結果がどのようなものであるか教えてください。ここであなたが何を望んでいるのか理解できない。 – ImGreg

+0

ユーザーインターフェイスを再考する必要があります。あまりにも混乱して使いにくいと思います。 – BoltBait

+0

タブの削除は、3つまたは4つの関数の深さです。ビジネスオブジェクトへのコントロールをバインドして、すべてのロジックをビジネスオブジェクトに入れるのですか?このGUIの機能は、直感的ではありません。 –

答えて

1

いいえrepro。シナリオは奇妙ですが、クラッシュすることはできません。選択を解除することを確認してください。

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をどのようにして選択解除することができるかを見てみましょう。それは問題を解決するだろう。 – fbhdev

+0

問題は、タブの削除がコードの3または4の深さであることです。 – fbhdev

+1

何をしていても、ここからは完全に見えません。間違っています。あなたの質問をよりよく記録する必要があります。問題を再現するスニペットが必要です。 –

0

ワン:

あなたは Tab1選択解除イベントが Tab2イベントを選択する前に上げていることを確認している場合

、私は私のカスタムタブコントロールを宣言し、それを上書きするを、しようとは次のように、OnPaintMethodですこの擬似コード:あなたのTabControlあなたがそのタイプのTabItemsを追加する必要がありますすること

public class MyCustomTab : TabItem 
{ 
    ... 


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

     base.Paint(...); 
    }  
} 

クリア。

関連する問題