The problem with the above solution is that the code handling the carpark is mixed up with the code handling the GUI. If there is a bug with the code for the carpark, then it is difficult to find the code because of all the code to do with the GUI.
It would be better to design a class for handling a carpark. If we are going to do this, then as before there are two questions to answer:
We have already decided an answer to the first question: a collection of number plates represented using an ArrayList. There are all sorts of operations that we could provide:
Here is the code of one possible CarPark class:
0355: Imports System.Text 0356: Public Class CarPark 0357: Private iArrayList As ArrayList 0358: Public Sub New() 0359: iArrayList = New ArrayList 0360: End Sub 0361: Public Sub Arrive(ByVal pString As String) 0362: iArrayList.Add(pString) 0363: End Sub 0364: Public Sub Depart(ByVal pString As String) 0365: iArrayList.Remove(pString) 0366: End Sub 0367: Public Overrides Function ToString() As String 0368: Dim tStringBuilder As StringBuilder = New StringBuilder 0369: For Each tString As String In iArrayList 0370: tStringBuilder.Append(tString & vbCrLf) 0371: Next 0372: Return tStringBuilder.ToString() 0373: End Function 0374: Public Function Size() As Integer 0375: Return iArrayList.Count 0376: End Function 0377: End Class
And here are the relevant parts of the Form1 class altered to use the CarPark class:
0378: Public Class Form1 0379: Inherits System.Windows.Forms.Form 0380: 0381: Private iCarPark As CarPark 0382: #Region " Windows Form Designer generated code " 0383: 0384: Public Sub New() 0385: MyBase.New() 0386: 0387: 'This call is required by the Windows Form Designer. 0388: InitializeComponent() 0389: 0390: 'Add any initialization after the InitializeComponent() call 0391: iCarPark = New CarPark 0392: End Sub
...
0488: Private Sub Button1_Click(ByVal sender As System.Object, _ 0489: ByVal e As System.EventArgs) Handles Button1.Click 0490: iCarPark.Arrive(TextBox1.Text) 0491: Label1.Text = TextBox1.Text + " has arrived" 0492: End Sub 0493: 0494: Private Sub Button2_Click(ByVal sender As System.Object, _ 0495: ByVal e As System.EventArgs) Handles Button2.Click 0496: iCarPark.Depart(TextBox1.Text) 0497: Label1.Text = TextBox1.Text + " has departed" 0498: End Sub 0499: 0500: Private Sub Button3_Click(ByVal sender As System.Object, _ 0501: ByVal e As System.EventArgs) Handles Button3.Click 0502: TextBox2.Text = iCarPark.ToString() 0503: End Sub 0504: End Class