[VB.NET] Combobox Taggen

Pagina: 1
Acties:

  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 15-05 12:18
Hoi mensen,

Het is een klein en (naar mijn idee) simpel probleem.
Ik probeer een item die ik net heb toegevoegd aan mijn combobox lijst, om die te taggen (zodat ik eigelijk 2 waardes kan opslaan in het beestje).

Normaal gesproken kan je zo taggen:
(bij listview)
listview_1.Items.Add(Variable, index).Tag = VariabeleTag

Maar dat zelfde werkt niet bij een combobox, terwijl deze ook de "tag" property in zich heeft.
Welke fout maak ik hier ?

Alvast bedankt

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:10
De Tag property geldt voor de combobox zelf, en niet voor de items in de combobox.

Wat je wel kan doen is: gebruik maken van de DataSource property en de Display- en VAlueMembers.
Stel, je hebt een arraylist waar je je objecten aan toevoegt die je in je arraylist wil tonen.
Die arraylist assign je dan aan de datasource property, en je zet ook de Display- en ValueMember properties van de combobox.

Je kan ook een eigen class (MyComboListItem bv) maken die een 'Key' en een 'Text' field heeft. Je override de onstring, en je voegt items toe van MyComboListItem aan die combobox.

Zie ook dit topic:
[rml][ .NET/C#] Items adden aan een combo met extra info[/rml]

[ Voor 9% gewijzigd door whoami op 18-11-2004 11:16 ]

https://fgheysels.github.io/


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 15-05 12:18
Ik heb ongeveer net zo iets gevonden, en gebruikt in me code.
Wat tevens de oplossing is voor het probleem, echter ik vind het jammer dat je niet net als bij een listview ook makkelijker een tag kan plaatsen aan de items.

Class
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    Public Class Mylist
        Private sName As String
        ' You can also declare this as String,bitmap or almost anything. 
        ' If you change this delcaration you will also need to change the Sub New 
        ' to reflect any change. Also the ItemData Property will need to be updated. 
        Private iID As Integer

        ' Default empty constructor. 
        Public Sub New()
            sName = ""
            ' This would need to be changed if you modified the declaration above. 
            iID = 0
        End Sub

        Public Sub New(ByVal Name As String, ByVal ID As Integer)
            sName = Name
            iID = ID
        End Sub

        Public Property Name() As String
            Get
                Return sName
            End Get
            Set(ByVal sValue As String)
                sName = sValue
            End Set
        End Property

        ' This is the property that holds the extra data. 
        Public Property ItemData() As Int32
            Get
                Return iID
            End Get
            Set(ByVal iValue As Int32)
                iID = iValue
            End Set
        End Property

        ' This is neccessary because the ListBox and ComboBox rely 
        ' on this method when determining the text to display. 
        Public Overrides Function ToString() As String
            Return sName
        End Function

    End Class


Data invoegen
code:
1
2
3
Dim myListItem As Mylist
myListItem = New Mylist(textVariable, tagVariabele)
cbGBfunctie.Items.Add(myListItem)


Data verkrijgen
code:
1
2
3
4
5
6
Private Sub cbGBfunctie_SelectedIndexChanged(ByVal sender As 
System.Object, ByVal e As System.EventArgs) Handles cbGBfunctie.SelectedIndexChanged
        Dim mList As Mylist
        mList = cbGBfunctie.Items(cbGBfunctie.SelectedIndex)
        MsgBox(mList.ItemData)
End Sub

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:10
Mjah, dat vind ik ook.
Jammer dat er geen 'algemene' listItem class is voor Items in Listboxen en ComboBoxen oid. Of toch een 'nettere' oplossing dan diegene die er nu is.
Het werkt iig wel goed icm databinding, maar ik wil niet altijd met databinding werken...

https://fgheysels.github.io/