2010-02-04 3 views
4

Есть ли тег для элемента в CheckedListBox? Или что-то подобное? Я хотел бы иметь возможность хранить и идентификатор, связанные с элементом, который я показываю.VB.NET CheckedListBox Tag?

+0

Является ли это для Windows Forms, WPF, Silverlight или ASP.NET Web Forms? (В наши дни почти смешно, так много возможностей, но я должен спросить.) –

+0

Winform и vb.net – Alex

ответ

2

Вы можете наследовать свой контроль от CheckedListBox и создать свойство, в C# это будет похоже на это, остальная часть функциональности остается такой же, как она не наследуется, поэтому дальнейшая дополнительный код, необходимый:

 
public class MyCheckedListbox : System.Windows.Forms.CheckedListBox{ 
    private object thisObj; 
    public object Tag{ 
     get{ return this.thisObj; } 
     set{ this.thisObj = value; } 
    } 
} 

Edit: Решил включить версию VB.NET на благо каждого также ...

 
Public Class MyCheckedListBox Inherits System.Windows.Forms.CheckedListBox 
    Private thisObj As Object 
    Public Property Tag As Object 
     Get 
     Tag = thisObj 
     End Get 
     Set (objParam As Object) 
     thisObj = objParam 
     End Set 
    End Property 
End Class 

конечно, это просто и использует бокс, но работает хорошо ...

Надеется, что это помогает

+0

можно ли это сделать и на vb.net? – Alex

+0

@ bochur1: да, это может ... дайте мне посмотреть, могу ли я перевести его на VB.NET для вас .... – t0mm13b

+0

@ Bochur1: Хорошо, я отредактировал свой ответ ... надеюсь, что ошибок там нет ... :) – t0mm13b

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

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() диктует то, что будет отображаться в окне.)

Смежные вопросы