Reputation: 13
Every time when you press the button, you should get a customer added to your list. But it just overrides my previous value and doesn't update the List.
This is exactly what they did in my book, but I don't know why the next variable doesn't get added to the list
Private Sub btnOpslaan_Click(sender As Object, e As EventArgs) Handles btnOpslaan.Click
Dim klantenlijst As New List(Of Klant)
Dim nieuwe_klant As New Klant
Dim path As String = IO.Path.GetTempFileName()
nieuwe_klant.Naam = txtNaam.Text
nieuwe_klant.Straat = txtStraat.Text
nieuwe_klant.Postcode = txtPostcode.Text
nieuwe_klant.Gemeente = txtGemeente.Text
nieuwe_klant.Telefoon = txtTelefoon.Text
nieuwe_klant.Email = txtEmail.Text
If chkHardware.Checked = True Then
nieuwe_klant.Hardware = True
End If
If chkInternet.Checked = True Then
nieuwe_klant.Internet = True
End If
If chkMultimedia.Checked = True Then
nieuwe_klant.Multimedia = True
End If
If chkSoftware.Checked = True Then
nieuwe_klant.Software = True
End If
klantenlijst.Add(nieuwe_klant)
MsgBox(klantenlijst.Count)
End Sub
My class "Klant"
Public Class Klant
Private mNaam As String
Private mStraat As String
Private mPostcode As String
Private mGemeente As String
Private mTelefoon As String
Private mEmail As String
Private mHardware As Boolean
Private mSoftware As Boolean
Private mInternet As Boolean
Private mMultimedia As Boolean
Public Sub New()
mHardware = False
mInternet = False
mSoftware = False
mMultimedia = False
mNaam = "Niet ingevuld"
mStraat = "Niet ingevuld"
mPostcode = "Niet ingevuld"
mGemeente = "Niet ingevuld"
mTelefoon = "Niet ingevuld"
mEmail = "Niet ingevuld"
End Sub
Public Property Hardware() As Boolean
Get
Return mHardware
End Get
Set(ByVal value As Boolean)
mHardware = value
End Set
End Property
Public Property Software() As Boolean
Get
Return mSoftware
End Get
Set(ByVal value As Boolean)
mSoftware = value
End Set
End Property
Public Property Internet() As Boolean
Get
Return mInternet
End Get
Set(ByVal value As Boolean)
mInternet = value
End Set
End Property
Public Property Multimedia() As Boolean
Get
Return mMultimedia
End Get
Set(ByVal value As Boolean)
mMultimedia = value
End Set
End Property
Public Property Naam() As String
Get
Return mNaam
End Get
Set(ByVal value As String)
mNaam = value
End Set
End Property
Public Property Straat() As String
Get
Return mStraat
End Get
Set(ByVal value As String)
mStraat = value
End Set
End Property
Public Property Postcode() As String
Get
Return mPostcode
End Get
Set(ByVal value As String)
mPostcode = value
End Set
End Property
Public Property Gemeente() As String
Get
Return mGemeente
End Get
Set(ByVal value As String)
mGemeente = value
End Set
End Property
Public Property Telefoon() As String
Get
Return mTelefoon
End Get
Set(ByVal value As String)
mTelefoon = value
End Set
End Property
Public Property Email() As String
Get
Return mEmail
End Get
Set(ByVal value As String)
mEmail = value
End Set
End Property
End Class
Upvotes: 1
Views: 77
Reputation: 218877
Every time the button is clicked, you create a new list:
Dim klantenlijst As New List(Of Klant)
And then you add exactly one item to that list:
klantenlijst.Add(nieuwe_klant)
So that list will only ever contain one item.
Instead, create a class-level list and add to that. So put this line at the class level:
Dim klantenlijst As New List(Of Klant)
Then the same list is available throughout the instance of the class. A few things to note:
Upvotes: 1
Reputation: 319
The issue here is that on every click, you are declaring a new 'klantenlijst' and making it private. Just declare it outside of the click and you'll get the desired result:
Dim klantenlijst As New List(Of Klant)
Private Sub btnOpslaan_Click(sender As Object, e As EventArgs) Handles btnOpslaan.Click
Dim nieuwe_klant As New Klant
Dim path As String = IO.Path.GetTempFileName()
nieuwe_klant.Naam = txtNaam.Text
//continue your code...
klantenlijst.Add(nieuwe_klant)
MsgBox(klantenlijst.Count)
Upvotes: 2