トップ回答者
PictureBox上のControl Arrayを消去する

質問
-
こんにちは。いつもお世話になっています。
PictureBox(PictureBox2)上にLabelのControl Arrayがあります。これらのLabelは以下のコード(簡略化してある)で作成しています。
Public n As Integer Public nLabelArray() As Label '=================== For i As Integer = 0 To n nLabelArray(i) = New Label nLabelArray(i).Parent = PictureBox2 nLabelArray(i).BackColor = Drawing.Color.Transparent nLabelArray(i).Location = New Point(30 + i * 120, 20) nLabelArray(i).ForeColor = Color.White nLabelArray(i).Text = ListView1.Items(i).SubItems(1).Text Next i
一度表示したControl Arrayを全て削除するのに苦労しています。以下のコードを使うと最後のLabelだけしか削除されません。
If n >= 0 Then For i As Integer = n To 0 Step -1 PictureBox2.Controls.Remove(nLabelArray(i)) PictureBox2.Refresh() Next End If
他のプロジェクトでは似た様なやりかたでPictureBox上にあるControl Arrayを問題なく全て削除できてたのですが。。。色々やりましたが、全てのLabelは消えません。
どうぞよろしくお願いします。
Onion is a recent refuge from Mac OS X and hates Mac App Store. System: Windows 7 x64
回答
-
推測ですが、同じ配列に2回以上作ったものを入れていませんか?
例示されているコードを見ると、1回しか想定されていませんので、2回以上呼び出すと、最後に追加したコントロール群しか削除されないでしょう。(nLabelArray の内容が最後のコントロールで上書きされるため)何回も追加したいのなら、nLabelArray を List(Of T) 型に置き換えて、追加した分だけ Add していくような形にするとかですかね。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
- 回答としてマーク Onion Ring 2012年3月4日 22:40
すべての返信
-
推測ですが、同じ配列に2回以上作ったものを入れていませんか?
例示されているコードを見ると、1回しか想定されていませんので、2回以上呼び出すと、最後に追加したコントロール群しか削除されないでしょう。(nLabelArray の内容が最後のコントロールで上書きされるため)何回も追加したいのなら、nLabelArray を List(Of T) 型に置き換えて、追加した分だけ Add していくような形にするとかですかね。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
- 回答としてマーク Onion Ring 2012年3月4日 22:40