4

CheckedListBox に項目のタグはありますか? それとも似たようなもの?表示しているアイテムに関連付けられた ID を保存できるようにしたいと考えています。

4

3 に答える 3

7

Tag プロパティは必要ありません。コントロールは任意のオブジェクトを受け入れます。つまり、文字列だけを入れる必要はありません。ToString()文字列 (およびオーバーライドされた) と必要なその他のデータ メンバーを持つクラスを作成します。

Public Class Form1

    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        MyBase.OnLoad(e)

        CheckedListBox1.Items.Add(New MyListBoxItem() With {.Name = "One", .ExtraData = "extra 1"})
        CheckedListBox1.Items.Add(New MyListBoxItem() With {.Name = "Two", .ExtraData = "extra 2"})
    End Sub

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        For Each obj As Object In CheckedListBox1.CheckedItems
            Dim item As MyListBoxItem = CType(obj, MyListBoxItem)
            MessageBox.Show(String.Format("{0}/{1} is checked.", item.Name, item.ExtraData))
        Next
    End Sub
End Class

Public Class MyListBoxItem
    Private _name As String
    Private _extraData As String

    Public Property Name As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Public Property ExtraData As String
        Get
            Return _extraData
        End Get
        Set(ByVal value As String)
            _extraData = value
        End Set
    End Property

    Public Overrides Function ToString() As String
        Return Name
    End Function

End Class

(オーバーライドToString()によって、ボックスに表示される内容が決まります。)

于 2010-02-13T04:37:09.217 に答える
2

CheckedListBox から独自のコントロールを継承してプロパティを作成できます。C# では次のようになります。残りの機能は継承されたままなので、追加のコードは必要ありません。

public class MyCheckedListbox : System.Windows.Forms.CheckedListBox{
    プライベート オブジェクト thisObj;
    公開オブジェクトタグ{
       get { return this.thisObj; }
       設定{ this.thisObj = 値; }
    }
}

編集:すべての人の利益のためにVB.NETバージョンも含めることにしました...

Public Class MyCheckedListBox Inherit System.Windows.Forms.CheckedListBox
    thisObj をオブジェクトとして非公開にする
    オブジェクトとしてのパブリック プロパティ タグ
      得る
        タグ = thisObj
      エンドゲット
      設定 (オブジェクトとしての objParam)
        thisObj = objParam
      エンドセット
    End プロパティ
クラス終了

もちろん、これはプレーンでボクシングを使用していますが、うまく機能します...

お役に立てれば

于 2010-02-04T23:16:48.247 に答える
0

tommieb75 回答の VB.NET への翻訳:

Public Class MyCheckedListbox 
    Inherits System.Windows.Forms.CheckedListBox 
    Private thisObj As Object 
    Public Property Tag() As Object 
        Get 
            Return Me.thisObj 
        End Get 
        Set(ByVal value As Object) 
            Me.thisObj = value 
        End Set 
    End Property 
End Class

www.developerfusion.com/tools のトランスレータを使用しています

于 2010-02-04T23:40:01.433 に答える