私は親ノードと子ノードの1つのレベルでツリービューコントロールを持っています。各ノードには、削除ボタンをクリックすると選択後のノードを選択するチェックボックスがあります。次のコードと、エラー選択した親ノードと子ノードを削除 - コレクションが変更されました。列挙操作が実行されない可能性があります
コード
protected void btnRemoveOrganisation_Click(object sender, EventArgs e)
{
foreach (TreeNode Item in tvwSelectedOrganisations.CheckedNodes)
{
if (Item.Parent == null)
{
foreach (TreeNode ChildNode in Item.ChildNodes)
{
Item.ChildNodes.Remove(ChildNode);
}
tvwSelectedOrganisations.Nodes.Remove(Item);
}
else
{
Item.Parent.ChildNodes.Remove(Item);
}
}
}
コレクションが変更されたエラーを返します。列挙操作が実行されないことがあります。
変更されたコードあなたはあなたが列挙しているコレクションを修正しているので、あなたは、foreachの内部にこの行を持つことができません
int SelectedCount = SelectedNodes.Count;
for (int i = SelectedCount - 1; i >= 0; i--)
{
if (tvwSelectedOrganisations.CheckedNodes[i].Parent == null)
{
int j = tvwSelectedOrganisations.CheckedNodes[i].ChildNodes.Count;
tvwSelectedOrganisations.Nodes.Remove(tvwSelectedOrganisations.CheckedNodes[i]);
i += j;
}
else
{
tvwSelectedOrganisations.FindNode(tvwSelectedOrganisations.CheckedNodes[i].Parent.ValuePath).ShowCheckBox = false;
tvwSelectedOrganisations.FindNode(tvwSelectedOrganisations.CheckedNodes[i].Parent.ValuePath).ChildNodes.Remove(tvwSelectedOrganisations.CheckedNodes[i]);
}
}
解決策が見つかりました。一般的なリストが使用されていたため、正しいコードで投稿を更新しました – sudheshna