none
PictureBox上のControl Arrayを消去する RRS feed

  • 質問

  • こんにちは。いつもお世話になっています。

    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

    2012年3月4日 12:32

回答

  • 推測ですが、同じ配列に2回以上作ったものを入れていませんか?
    例示されているコードを見ると、1回しか想定されていませんので、2回以上呼び出すと、最後に追加したコントロール群しか削除されないでしょう。(nLabelArray の内容が最後のコントロールで上書きされるため)

    何回も追加したいのなら、nLabelArray を List(Of T) 型に置き換えて、追加した分だけ Add していくような形にするとかですかね。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

    • 回答としてマーク Onion Ring 2012年3月4日 22:40
    2012年3月4日 22:24
    モデレータ

すべての返信

  • どうもお騒がせしました。どうもControl Arrayの作り方に問題があったようです。色々と調べて、基本から初めてControl Arrayを作り直したら問題が解決しました。

    Onion is a recent refuge from Mac OS X and hates Mac App Store. System: Windows 7 x64

    2012年3月4日 16:25
  • どうも問題の原因は他のフォームからの呼び出しでControl Arrayをつくったのところにあるようです。

    Onion is a recent refuge from Mac OS X and hates Mac App Store. System: Windows 7 x64

    2012年3月4日 17:23
  • 推測ですが、同じ配列に2回以上作ったものを入れていませんか?
    例示されているコードを見ると、1回しか想定されていませんので、2回以上呼び出すと、最後に追加したコントロール群しか削除されないでしょう。(nLabelArray の内容が最後のコントロールで上書きされるため)

    何回も追加したいのなら、nLabelArray を List(Of T) 型に置き換えて、追加した分だけ Add していくような形にするとかですかね。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

    • 回答としてマーク Onion Ring 2012年3月4日 22:40
    2012年3月4日 22:24
    モデレータ
  • 確かにそうだと思います。どうもありがとうございます。

    Onion is a recent refuge from Mac OS X and hates Mac App Store. System: Windows 7 x64

    2012年3月4日 22:42