tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル動的作成したコントロールの削除(VB2005)
記事No6769
投稿日: 2008/01/08(Tue) 15:27
投稿者いちよる
こんにちは。
動的に作成したコントロールの削除(VB2005)について教えてください。


ボタン1を押下すると5つユーザーコントロールを作成します。

    ' イベントが発生するように宣言しておく
    Private WithEvents P_ctlFloor As ucrFloor
    Private Sub btnMake_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMake.Click
        For j As Integer = 1 To 5
            P_ctlFloor = New ucrFloor
            Me.Controls.Add(P_ctlFloor)
            With P_ctlFloor
                .Size = New Size(10, 10)
                .Location = New Point(15 * j, 100)
                ' イベントを関連付ける
                AddHandler .DoubleClick, AddressOf FloorPict_DClick
            End With
        Next
    End Sub

    Private Sub FloorPict_DClick(ByVal sender As Object, ByVal e As System.EventArgs)
        MsgBox("CLICK")
    End Sub


ボタン2を押下するとユーザーコントロールを削除します。

    Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
        Me.Controls.Remove(P_ctlFloor)
    End Sub

↑この処理ですが、一番最後に作成したユーザーコントロールしか削除されません。
 2番目のコントロールを削除したい場合、どのように対応したらよいのでしょうか。

何か情報ありましたら教えてください。よろしくお願いします。

[ツリー表示へ]
タイトルRe: 動的作成したコントロールの削除(VB2005)
記事No6770
投稿日: 2008/01/08(Tue) 16:41
投稿者ろん
はじめまして。
コントロールを作成しているところで、適当な
名前をつけて、削除する時にそれを指定すればできますよ。

>         For j As Integer = 1 To 5
>             P_ctlFloor = New ucrFloor
>             Me.Controls.Add(P_ctlFloor)
>             With P_ctlFloor
        →.Name = j '適当な名前付ける。
>                 .Size = New Size(10, 10)
>                 .Location = New Point(15 * j, 100)
>                 ' イベントを関連付ける
>                 AddHandler .DoubleClick, AddressOf FloorPict_DClick
>             End With
>         Next

削除処理の中で
  Me.Controls.Remove(CType(Me.Controls("2"), ucrFloor))

[ツリー表示へ]
タイトルRe^2: 動的作成したコントロールの削除(VB2005)
記事No6771
投稿日: 2008/01/08(Tue) 16:49
投稿者いちよる
こんにちは^^

>    コントロールを作成しているところで、適当な
>    名前をつけて、削除する時にそれを指定すればできますよ。

任意のコントロールが削除できました!
ありがとうございました☆

[ツリー表示へ]
タイトルRe^2: 動的作成したコントロールの削除(VB2005)
記事No6772
投稿日: 2008/01/08(Tue) 17:41
投稿者よねKEN
細かいツッコミですみません。

>   Me.Controls.Remove(CType(Me.Controls("2"), ucrFloor))

Removeメソッドの引数はControlですから、CTypeによるキャストは不要だと思います。

Me.Controls.Remove(Me.Controls("2"))

[ツリー表示へ]
タイトルRe^3: 動的作成したコントロールの削除(VB2005)
記事No6774
投稿日: 2008/01/09(Wed) 03:41
投稿者YuO
さらに細かい突っ込みを。

> >   Me.Controls.Remove(CType(Me.Controls("2"), ucrFloor))
> Removeメソッドの引数はControlですから、CTypeによるキャストは不要だと思います。

RemoveAtってメソッドがあったりしますが……。


でもって,Remove系はDispose呼び出さないと思いましたが,よいのですかね。
「呼ばないといけない」という感じではないにしろ,リソースリークの可能性が……。

[ツリー表示へ]