foreach
Y 軸上の同じポイントにあるすべてのコントロールを取り除くために使用しているボタン クリック イベント ハンドラー内にループがあります。行を追加するコントロールがあり、追加するつもりのない行を削除するオプションがユーザーに必要です。
ループを単独で使用するforeach
と、一貫して 2 つの項目が失われます。毎回同じ 2 つの項目です。Y 値が実際に同一であることを確認しました。関数を実行し続けると、3 回実行した後に行のすべてのコントロールが削除されます。foreach
ただし、すべて同じ値を使用してループをネストすると、機能します。以下のコードを参照してください。
これはかなりずさんな方法のように思えますが、私にとってはうまくいった唯一の解決策でもあります。ループ内で 2 番目の変数 (つまり、) を宣言するように言った他の投稿をいくつか見ましたControl z = c; if(z.Location....)
。ここでの動作に違いはありませんでした。foreach
ループ自体が機能しない理由を誰か説明できますか? 繰り返しネストせずに修正するにはどうすればよいですか?
働く:
internal void MinButt_Click(object sender, EventArgs e)
{
Scratch.tScratch.panel2.Controls.RemoveByKey("Record" + arrDynamY[0].ToString());
foreach (Control c in Scratch.tScratch.panel2.Controls)
{
if (c.Location.Y == arrDynamY[1])
{
c.Dispose();
}
foreach (Control ctrl in Scratch.tScratch.panel2.Controls)
{
if (ctrl.Location.Y == arrDynamY[1])
{
ctrl.Dispose();
}
}
}
}
毎回同じ 2 つのコントロールを見逃します。
internal void MinButt_Click(object sender, EventArgs e)
{
Scratch.tScratch.panel2.Controls.RemoveByKey("Record" + arrDynamY[0].ToString());
foreach (Control c in Scratch.tScratch.panel2.Controls)
{
if (c.Location.Y == arrDynamY[1])
{
c.Dispose();
}
}
}