teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2019/04/06 05:16

投稿

YAmaGNZ
YAmaGNZ

スコア10678

answer CHANGED
@@ -16,7 +16,7 @@
16
16
  {
17
17
  if (pic1.Controls[i].GetType().Name == "ShapeContainer")
18
18
  {
19
- c.Dispose();
19
+ pic1.Controls[i].Dispose();
20
20
  }
21
21
  }
22
22
  ```

1

追記

2019/04/06 05:16

投稿

YAmaGNZ
YAmaGNZ

スコア10678

answer CHANGED
@@ -1,8 +1,20 @@
1
1
  多分、foreachのループ内でControlsの中身が変化することが原因と思われます。
2
+
3
+ pic1.Controls[0] = ShapeContainer1
4
+ pic1.Controls[1] = ShapeContainer2
5
+ pic1.Controls[2] = ShapeContainer3
6
+
7
+ とあった時に
8
+ foreachの最初でpic1.Controls[0]が取得され、ShapeContainer1が消されます。
9
+ この時
10
+ pic1.Controls[0] = ShapeContainer2
11
+ pic1.Controls[1] = ShapeContainer3
12
+ とControlsが変化するのですが、次のループでpic1.Controls[1]が取得されShapeContainer3が消されることになります。
13
+
2
14
  ```C#
3
15
  for (int i = pic1.Controls.Count - 1 ; i >=0 ; i--)
4
16
  {
5
- if (pic1.Controls(i).GetType().Name == "ShapeContainer")
17
+ if (pic1.Controls[i].GetType().Name == "ShapeContainer")
6
18
  {
7
19
  c.Dispose();
8
20
  }