multiple forms & procedures. form methods: –show, hide, activate, close events: –load,...

29
Multiple Forms & Procedures

Post on 21-Dec-2015

230 views

Category:

Documents


2 download

TRANSCRIPT

Multiple Forms & Procedures

Form

• Methods:– Show, Hide, Activate, Close

• Events:– Load, Activated, Closing, Closed

Form Closing Event Example

If MessageBox.Show("Are you sure?", "Warning", MessageBoxButtons.YesNo) = DialogResult.Yes Then

e.Cancel = False

Else

e.Cancel = True

End If

Modeless or Modal

• Modeless form: Other forms can receive input focus while this form remains active.– formName.Show()

• Modal form: No other form can receive focus while this form remains active.– formName.ShowDialog()

Multiple FormsTwo forms: Form1, Form2

To Open Form2 from Form1:

Dim f2 As New Form2()

f2.Show()

Open Form2 as a Modal form:

f2.ShowDialog()

Note: Form is defined as a class. Must create an instance of the form class by using the keyword New to access the form.

SharingVariables Among Forms

• Define these variables with class-level scope using the Public keyword.– Must use formName to qualify variables.– – Dim f2 As New Form2()

– TextBox1.Text = f2.g2 *** g2 is declared in form2

SharingVariables Among Forms

• Define these variables with project-level scope in a module using the Public keyword:

– Module Module1

– Public testVar As Integer

– End Module

– Note: Use Project/Add Windows form to add a module.

Modules

• A file contains code such as:– Variable declarations– Procedures and functions

• Variables and procedures used by more than one form should store in a module.

• Global variables: Public

Starting Application with Sub Main

• The Sub Main procedure must reside in a module.

• Choose Sub Main as startup object. The code in Main will execute.– Write code in Main to open forms.

Sub Main ExamplePublic Sub main()

Dim dateToday As Date

dateToday = Today

If dateToday.DayOfWeek = DayOfWeek.Saturday Or dateToday.DayOfWeek = DayOfWeek.Sunday Then

Dim frmWeekEnd As New Form2()

frmWeekEnd.ShowDialog()

Else

Dim frmWeekDay As New Form1()

frmWeekDay.ShowDialog()

End If

End Sub

Declare Form’s Instance Variable in An Open Form Event Procedure

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim f2 As New Form2()

f2.Show()

End Sub

Problem: This will create a new instance of the form every time the button is clicked.

Declare Form’s Instance Variable in a Module as Public Variable

Module Module1

Public f1 As New Form1()

Public f2 As New Form2()

End Module

It can be accessed in a procedure:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

f2.Show()

End Sub

Problem: Once the form is closed the variable is no longer exists. Attempt to access it again will trigger error.

Close Form Or Hide Form

Use a form’s Closing event to change Close to Hide:

Private Sub Form2_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

e.Cancel() = True

Me.Hide()

End Sub

Main Menu Control

– Add MainMenu control and follow the TypeHere instruction.

– Each submenu and each item on a submenu is represented by a MenuItem control.

– Use an & to specify an access key in the caption. Ex. &File, Sho&s

– Write an event procedure for each menu item.

• Shortcut keys– Select the Shortcut key property in the MenuItem’s

property window.– Select the Shorcut key from list.– Set ShowShortcut property to true.

• Separator bar– Right clock a menu item/Insert Separator

• Inserting, deleting a menu item– Right click and select the option.

• Rearranging menu items– dragging

Context Menu

• A context menu is a menu that displays when an object on the screen is right-clicked.

• Add the ContextMenu control (it is placed in a tray under the form). Right-click the control and choose Edit to create the menu.

• Use the object’s ContextMenu property to bind the object to the context menu.

Simple Text Editor

• Textbox’s properties, methods– Help

– Object Browser• System.Windows.Forms

• Menu: Undo, Copy, Cut, Paste, SelectAll, Search • Clipboard:

– Clipboard.SetDataObject(TextBox1.SelectedText)

– Clipboard.GetDataObject()

Procedures

. Sub procedure:

Private/Public Sub SubName(Arguments)

End Sub

Private: Can only be accessed by procedures in the same form.

Public: Can be accessed by procedures in other forms.

• To call a sub procedure SUB1• Call SUB1(Argument1, Argument2, …)

Function

• Private Function tax(salary) As Double

• tax = salary * 0.1

• End Function

– Or• Private Function tax(salary)

• Return salary * 0.1

• End Function

Call by Reference Call by Value

• ByRef– Default– The address of the item is passed. Any changes

made to the passing variable are made to the variable itself.

• ByVal– Only the variable’s value is passed.

ByRef, ByVal example

Private Sub Command1_Click()

Dim myStr As String

myStr = TextBox1.Text

ChangeTextRef (myStr)

TextBox1.Text = myStr

End Sub

Private Sub ChangeTextRef(ByRef strInput As String)

strInput = "New Text"

End Sub

Input, Output Arguments

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim sal, tax As Single

sal = CSng(TextBox1.Text)

Call CalTax(sal, tax)

TextBox2.Text = tax.ToString

End Sub

Private Sub CalTax(ByVal Salary As Single, ByRef Tax As Single)

Tax = 0.1 * Salary

End Sub

Can we pass the Tax ByVal?

Static Variables

• Static VariableName as DataType

• Static variables are local variables but are not destroyed when a procedure terminates. Their value are kept.

Static Variable Example

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Static clickCounter As Integer = 0

clickCounter += 1

If clickCounter > 3 Then

MsgBox("Sorry, you can only click 3 times!")

Button1.Enabled = False

End If

End Sub

Event Procedures

• Example:– Private Sub Button1_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Button1.Click

• The Handles keyword– Procedure name may change

• Handling multiple events:– Private Sub AllButtons_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Button1.Click, Button2.CLick

Using One Event Handler to Handle Events Generated by Many Controls• Assume we have 3 buttons.• Use the Handles clause in the event

procedure to associate controls with the event procedure.

• We can assign a value for each control’s Tag property, or use control’s TabIndex property to determine which control generates the event.

Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click

If sender.tag = "1" Then

MessageBox.Show("button 1 clicked")

ElseIf sender.tag = "2" Then

MessageBox.Show("button 2 clicked")

Else

MessageBox.Show("button 3 clicked")

End If

End Sub

Note: VB IntelliSense will not show the Tag property after you type sender.

Early Binding/Late Binding

• Early binding: VB compiler knows the object’s data type. It enables the use of IntelliSense.

• Late binding: VB compiler can’t determine the type of object that we are calling. This occurs because the object is declared as Object data type.

Demo: Phone Simulator