JavaScript Editor
JavaScript Debugger|
| ||
You've been asked to write the employee phone directory program and place a combo box with all the employee's names in the middle of a form. Now how do you connect phone numbers to the names?
In VB6 and before, each item in list boxes and combo boxes had an ItemData property, which allowed you to store text data for each item. Now, each item in a list box or combo box is itself an object, so I'll jump ahead a few chapters to Chapter 12, where we'll start creating our own classes and objects, to show how you can store additional data for each item in these controls. This example is named ComboBoxData on the CD-ROM.
To see how this works, I'll create a new class named DataItem, and each item in a combo box will be an object of this class. (To understand how to create classes, see Chapter 12.) This class will store both the name of each combo box item and some data. I'll let the New constructor store both the name and data for each item in private data members:
Public Class DataItem
Private Data As Single
Private Name As String
Public Sub New(ByVal NameArgument As String, ByVal Value As Single)
Name = NameArgument
Data = Value
End Sub
⋮
I'll also add a ToString method, overriding the Object class's ToString method, because this method will be called when the combo box needs to display the name of each item, and I'll also add a GetData method that we can use to get the internal, private data from objects:
Public Class DataItem
Private Data As Single
Private Name As String
Public Sub New(ByVal NameArgument As String, ByVal Value As Single)
Name = NameArgument
Data = Value
End Sub
Overrides Function ToString() As String
Return CStr(Name)
End Function
Public Function GetData() As Single
Return Data
End Function
End Class
| Tip |
If the list box contains objects that support properties, the DisplayMember property indicates which property of the object to show. If empty, this property is empty and the object's ToString method is used. |
When the form loads, we can create 20 objects of the DataItem class—item 5 will be named "Item 5" and store the internal value 5, for example—and place them in the combo box with the Items.Add method:
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim Objects(20) As DataItem
ComboBox1.BeginUpdate()
Dim intLoopIndex As Integer
For intLoopIndex = 0 To 20
Objects(intLoopIndex) = New DataItem("Item " & _
intLoopIndex, CSng(intLoopIndex))
ComboBox1.Items.Add(Objects(I))
Next
ComboBox1.Items.AddRange(Objects)
ComboBox1.EndUpdate()
End Sub
Because we've stored the DataItem objects in an array (named Objects here), there's another way of adding these items to a combo box or list box that's worth pointing out here—you can use the AddRange method like this to add all the objects in the Objects array to the combo box at once:
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim Objects(20) As DataItem
ComboBox1.BeginUpdate()
Dim intLoopIndex As Integer
For intLoopIndex = 0 To 20
Objects(intLoopIndex) = New DataItem("Item " & _
intLoopIndex, CSng(intLoopIndex))
Next
ComboBox1.Items.AddRange(Objects)
ComboBox1.EndUpdate()
End Sub
Now when the user selects an item in the combo box, I can use the SelectedItem property to get the selected object, and that object's GetData method to get the object's stored data (note that I must cast the item to an object of the DataItem class first, using CType), which I display in a message box. Here's the full code:
Public Class Form1
Inherits System.Windows.Forms.Form
'Windows Form Designer generated code
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim Objects(20) As DataItem
ComboBox1.BeginUpdate()
Dim intLoopIndex As Integer
For intLoopIndex = 0 To 20
Objects(intLoopIndex) = New DataItem("Item " & intLoopIndex, _
CSng(intLoopIndex))
Next
ComboBox1.Items.AddRange(Objects)
ComboBox1.EndUpdate()
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As _
System.Object, ByVal e As System.EventArgs) Handles _
ComboBox1.SelectedIndexChanged
MsgBox("The data for the item you selected is: " & _
CType(ComboBox1.SelectedItem, DataItem).GetData())
End Sub
End Class
Public Class DataItem
Private Data As Single
Private Name As String
Public Sub New(ByVal NameArgument As String, ByVal Value As Single)
Name = NameArgument
Data = Value
End Sub
Overrides Function ToString() As String
Return CStr(Name)
End Function
Public Function GetData() As Single
Return Data
End Function
End Class
You can see this example, ComboBoxData, at work in Figure 7.15. Now we're storing objects in combo boxes, and using object methods to store and retrieve data in those objects.
|
| ||
Free JavaScript Editor
JavaScript Editor