私は完全に動作しているボタンを「すべて閉じる」ボタンを持つ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);
}
}
}
ヒント:foreach文の内部に.Removeがあることと関係があります。 foreachループがコレクションが不変であると予想しているときは、コレクションを変更しています。 –
こんにちはNathan。申し訳ありません、私はあなたと今ではありません。私の限られたC#の知識から、左のすべてのタブを削除できるようにするには、.removeがforeach文の内側にある必要があります。 "すべてを右に閉じる"のコードが動作しています100% –
このスタックオーバーフローの記事をご覧ください。 http://stackoverflow.com/questions/7193294/intelligent-way-of-removing-items-from-a-listt-while-enumerating-in-c-sharp あなたが受け取っている正確なエラーを投稿することはできますか? ? –