In this tutorial on Visual Basic Modules, we will look at how to take our organisational skills to a whole new level with our already super-organised code split into nicely named Subroutines and Functions. Typically we have been developing single form applications. Our code has sat quite happily in this form but say we have a Subroutine to handle a click event. How do we share this routine between multiple forms? Modules.
Create a new project called Modules. In the form Load event add the following code.
Dim radiusOne as Double Dim areaOne as Double Dim radiusTwo as Double Dim areaTwo as Double radiusOne = 3 radiusTwo = 2 areaOne = CalculateArea( radiusOne ) areaTwo = CalculateArea( radiusTwo )
Add this routine to the Form too
Private Function CalculateArea (ByRef radius as Double) As Double Dim pi as Double pi = 355/113 Return pi * radius ^ 2 End Sub
Add another Form to your Project (Select the Project with your mouse, Right click, Click Add and Click Windows Form as shown below)
On this Form add
- a textbox called textRadius
- A label witht he text “Enter the Radius to calculate the area of a circle”
- a label called labelArea
- a button called “buttonCalculateArea” with the caption/text “Calculate Area”
Design the form so it looks roughly as follows.
Add the following code to the button click event.
Dim radius as Double Dim area as Double radius = CDbl( textRadius.Text) area = CalculateArea( radius ) labelArea.Text = “The area of the circle is “ & CStr(area)
What are these new functions CDbl and CStr I hear you alert readers asking? Well, a Textbox.Text property returns a string. However our Function is expecting a Double as the radius. The CDbl (Convert to Double) function converts the textbox text into a Double datatype (if numeric, otherwise an error is thrown). Once we have the area from the CalculateArea function, we need to convert this Double back to a String to add to the text field of labelArea. We we use the CStr (Convert to String) Function for this.
We want this form to be the first form that is loaded when the application starts. We want this form to be the Startup Form. To do this, click on the Solution in the Solution Explorer, right click on the form and click Properties as shown below.
You should now see the the Project Properties dialog.
In the Startup Form dropdown select Form2.
Go back to your project and Add a New Module called ModuleFormula
Double click on your Module to add code. Cut and paste the CalculateArea Function from Form1 and paste it into the module.
Module ModuleFormulas Private Function CalculateArea (ByRef radius as Double) As Double Dim pi as Double pi = 355/113 Return pi * radius ^ 2 End Function End Module
Click F5 to run your project. What happens? You get an error. The error says that the ‘CalculateArea’ is not delcared and may be unavailable due to its protection level. Remember our exercise on Variable Scope which stated Variable scope defines when a variable can be accessed.? Functions and Subroutines have scope too. Scope in it’s wider context defines when a variable, subroutine or function can be accessed.
The first line of our CalculateArea function is defined as follows:
Private Function CalculateArea(ByRef radius As Double) As Double
Private in this case tells Visual Basic that the Function is only available within our module. If we declared the Function in the Form, which we did originally, we informed Visual Basic that the Function was only accessible from code within the Form. Essentially, Private is a means of declaring the variable local to its container.
Change the word Private to Public to make the Function available anywhere in our application.
Public Function CalculateArea(ByRef radius As Double) As Double
Press F5 and what happens? It works! Yay!
Enter a Radius, click calculate and you’ll see the exact area (perhaps too exact) of the circle.
Now you can access this function from anywhere in your application and you’ve started to organise the contents of your project. You can create Visual Basic Modules with Functions and Subroutines for specific tasks. For example, we could re-name this module moduleTrigonometry and build up the routines we need for calculating areas, radii etc. It all depends what our application does and how we want to organise it.
You’ll notice when you gain more experience in coding that some programmers are extremely neat in organising their code, some not so. I recommend being disciplined at this stage until being organised becomes second nature. Your co-workers will love you for it.