2017-02-06 3 views
-1

私は完全に動作しているボタンを「すべて閉じる」ボタンを持つtabcontrol(WinForm)を持っています。今私は "すべてを左に閉じて"忙しいです。私はいくつかの行を "右に近い"ものにしてそれに応じて変更しましたが、何か不明で原因不明の理由でそれはうまくいきません。すべてのTabPagesを左に閉じる

選択したタブからすべてのタブが閉じますが、タブをMessageBoxで削除した行を置き換えると正しい出力が得られます。以下は私のコードです。

tabpagenumber = (tabControl1.SelectedIndex+1); 

if (tabControl1.TabCount > 1) 
{ 
    TabControl.TabPageCollection tabcoll = tabControl1.TabPages; 
    foreach (TabPage tabpage in tabcoll) 
    { 
     tabControl1.SelectedTab = tabpage; 
     if ((tabControl1.SelectedIndex+1) < tabpagenumber) 
     { 
      tabControl1.TabPages.Remove(tabpage); 
      // MessageBox.Show(tabpagenumber.ToString()); 
     } 
    } 
} 

コード「右にすべてを閉じて」の下に、私はあなたが直面している問題を説明してみましょう

pagenumber = (tabControl1.SelectedIndex + 1); 

if (tabControl1.TabCount > 1) 
{ 
    TabControl.TabPageCollection tabcoll = tabControl1.TabPages; 
    foreach (TabPage tabpage in tabcoll) 
    { 
     tabControl1.SelectedTab = tabpage; 

     int testb = tabControl1.TabCount; 

     if (pagenumber < (tabControl1.SelectedIndex + 1)) 
     { 
      // closeToolStripMenuItem_Click(sender, e); 

      tabControl1.TabPages.Remove(tabpage); 
     } 
    } 
} 
+2

ヒント:foreach文の内部に.Removeがあることと関係があります。 foreachループがコレクションが不変であると予想しているときは、コレクションを変更しています。 –

+0

こんにちはNathan。申し訳ありません、私はあなたと今ではありません。私の限られたC#の知識から、左のすべてのタブを削除できるようにするには、.removeがforeach文の内側にある必要があります。 "すべてを右に閉じる"のコードが動作しています100% –

+0

このスタックオーバーフローの記事をご覧ください。 http://stackoverflow.com/questions/7193294/intelligent-way-of-removing-items-from-a-listt-while-enumerating-in-c-sharp あなたが受け取っている正確なエラーを投稿することはできますか? ? –

答えて

2

を進めています。 4タブがあるとします:1234とし、3番目のタブの左側にあるすべてのタブを削除するとします。あなたはタブの繰り返しを開始します。最初のタブを削除すると、残っているものはインデックスのあるタブです234のようになりますか?いいえ。彼らはインデックスを変更しました。現在は1、2、3です。次のタブを削除します。インデックスも3より小さいインデックスです。そして、すべてのタブを削除するまでサイクルが続きます。

反復と削除の代わりに、最初にタブを繰り返して、削除するタブを一時的なコレクションに追加する必要があります。終了したら、このコレクションのすべてのタブを削除します。

+0

これは今や理にかなっています。あなたは今私を正しい方向に向けることができますか?それを配列に入れて、それを削除しますか? –

+0

@SuzanneCoetzeeあなたは自分自身でそれをやろうとしてください。後であなたのバグを修正できます。本当に難しいことではありません。 – greenshade

+0

北に歩くのは難しくありませんが、北の場所を知ることは難しいです。 –

関連する問題