2017-11-14 11 views
0

ユーザが選択するオプションに応じてタブコントロール内のタブを動的に変更したい。私はここでの例に従っているTabControlにタブが存在するかどうかチェックするC#

TabControl.TabPageCollection.Contains Method (TabPage)

次のように私のコードです。

private TabPage VulnTab; 

VulnTab = new TabPage("Vulnerability"); 
if (tabControl1.TabPages.Contains(VulnTab) == true) 
{ 
    tabControl1.SelectedTab = VulnTab; 
} 
else 
{ 
    tabControl1.TabPages.Add(VulnTab); 

    tabControl1.SelectedTab = VulnTab; 
    var vuln = new vulnerability(); 
    tabControl1.SelectedTab.Controls.Add(vuln); 
} 

これはボタンクリックで発生します。

最初の実行時にVulnTabが存在しないため、VulnTabは正常に作成されます。ただし、ボタンを再度クリックすると、新しいボタンが再度作成されます。

2番目のボタンをクリックして、タブページが既に存在し、そこに移動していることをメモします。

どうすればこの問題を解決できますか?

+1

'== true'には意味がありません。 – SLaks

答えて

2

問題は、毎回完全に新しいページを作成しているということです。あなたはプライベートのTabPageオブジェクトを定義しているとして、あなたはクラス(?フォーム)の範囲には、それを移動することができ、それは以下の例のように、ヌルだかどうかを確認 :もちろんButtonClicked

private TabPage VulnTab; 

private void ButtonClicked(object sender, EventArgs args) 
{ 
    if (VulnTab != null) 
    { 
     tabControl1.SelectedTab = VulnTab; 
    } 
    else 
    { 
     VulnTab = new TabPage("Vulnerability"); 
     tabControl1.TabPages.Add(VulnTab); 

     tabControl1.SelectedTab = VulnTab; 
     var vuln = new vulnerability(); 
     tabControl1.SelectedTab.Controls.Add(vuln); 
    } 
} 

は、あなたの行動を発射するだけでどんな方法であり、タブの作成および/または変更。

今後の参考資料:新しいオブジェクトを作成する場合(キーワードnewを使用)、完全に新しいオブジェクトを作成しています。彼らは同じかもしれませんが、同じものではありません。同じように見える2つのリンゴは同じリンゴではありません。特定の条件(オブジェクトが単純な型(数値、DateTime)またはIEquatableが実装されている)の下でのみ、2つの別々の場所で作成された2つのオブジェクトは.NETに等しい場合があります。

+0

これはうまくいきました。 –

+0

@AdrianBrownあなたのコードに何が間違っていたかを深く説明して、私の答えを編集してください。将来このような問題を避けることができます。 また、私の答えがあなたの問題を解決した場合、それを解決問題としてマークしてください、これは私に多く役立ちます;) –

+1

詳細について多くの感謝。答えたとマークした(申し訳ありません、私はタイマーを待たなければなりませんでした!) –

1
VulnTab = new TabPage("Vulnerability"); 
if (tabControl1.TabPages.Contains(VulnTab) == true) 

新しいTabPageを作成したばかりです。明らかに、それはTabPagesにはありません。

既存インスタンスを一度しか作成しないでチェックする必要があります。

+0

あなたがごめんなさい、わかりません - (tabControl1.TabPages.Contains(VulnTab)== true)) - タブが存在する場合は空白のTabControl - テストを仮定して、それを作成してTabPagesコレクションに追加します。 TabPagesを再チェックするときに、それは今存在するはずです。 –

+0

しかし、あなたは_different_インスタンスのために再チェックしています。 – SLaks

+0

私は今あなたを理解しています - @DominikSzymańskiもこれを指摘しており、私には解決策があります –

関連する問題