Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms 
Namespace Microsoft.Samples.WinForms.VB.Menus Public Class Menus 
Inherits System.WinForms.Form Private components As System.ComponentModel.Container 
Private label1 As System.WinForms.Label 
Private mainMenu As System.WinForms.MainMenu 
Private label1ContextMenu As System.WinForms.ContextMenu Private Class FontSizes 
public shared Small As Single = 8f
public shared Medium As Single = 12f
public shared Large As Single = 24f
End Class'Font face and size
Private fontFace As String = "Arial" 
Private fontSize As Single = FontSizes.Medium 'Used to track which menu items are checked/unchecked
Private mmiArial As MenuItem 
Private mmiTimesNewRoman As MenuItem 
Private mmiCourier As MenuItem 
Private mmiSmall As MenuItem 
Private mmiMedium As MenuItem 
Private mmiLarge As MenuItem 
Private cmiArial As MenuItem 
Private cmiTimesNewRoman As MenuItem 
Private cmiCourier As MenuItem 
Private cmiSmall As MenuItem 
Private cmiMedium As MenuItem 
Private cmiLarge As MenuItem Private miMainFormatFontChecked As MenuItem 
Private miMainFormatSizeChecked As MenuItem 
Private miContextFormatFontChecked As MenuItem 
Private miContextFormatSizeChecked As MenuItem Public Sub New() MyBase.New' Required by the Windows Forms Designer
InitializeComponent' TODO: Add any constructor code after InitializeComponent calllabel1.Font = new Font(fontFace, fontSize)'Add File Menu
Dim miFile As MenuItem = mainMenu.MenuItems.Add("&File")
miFile.MenuItems.Add(new MenuItem("&Open...", new EventHandler(AddressOf Me.FileOpen_Clicked), Shortcut.CtrlO))
miFile.MenuItems.Add("-") ' Gives us a seperator
miFile.MenuItems.Add(new MenuItem("E&xit", new EventHandler(AddressOf Me.FileExit_Clicked), Shortcut.CtrlX))'Add Format Menu
Dim miFormat As MenuItem = mainMenu.MenuItems.Add("F&ormat")'Font Face sub-menu
mmiArial = new MenuItem("&Arial", AddressOf Me.FormatFont_Clicked)
mmiArial.Checked = true 
mmiArial.DefaultItem = true 
mmiTimesNewRoman = new MenuItem("&Times New Roman", AddressOf Me.FormatFont_Clicked)
mmiCourier = new MenuItem("&Courier New", AddressOf Me.FormatFont_Clicked)miFormat.MenuItems.Add( "Font &Face" _
, new EventHandler(AddressOf Me.FormatFont_Clicked) _
, (new MenuItem(){ mmiArial, mmiTimesNewRoman, mmiCourier }))'Font Size sub-menu
mmiSmall = new MenuItem("&Small", AddressOf Me.FormatSize_Clicked)
mmiMedium = new MenuItem("&Medium", AddressOf Me.FormatSize_Clicked)
mmiMedium.Checked = true 
mmiMedium.DefaultItem = true 
mmiLarge = new MenuItem("&Large", AddressOf Me.FormatSize_Clicked)miFormat.MenuItems.Add( "Font &Size" _
, new EventHandler(AddressOf Me.FormatSize_Clicked) _
, (new MenuItem(){ mmiSmall, mmiMedium, mmiLarge }))'Add Format to label context menu
'Note have to add a clone because menus can't belong to 2 parents
label1ContextMenu.MenuItems.Add(miFormat.CloneMenu)' Set up the context menu items - we use these to check and uncheck items
cmiArial = label1ContextMenu.MenuItems(0).MenuItems(0).MenuItems(0)
cmiTimesNewRoman = label1ContextMenu.MenuItems(0).MenuItems(0).MenuItems(1)
cmiCourier = label1ContextMenu.MenuItems(0).MenuItems(0).MenuItems(2)
cmiSmall = label1ContextMenu.MenuItems(0).MenuItems(1).MenuItems(0)
cmiMedium = label1ContextMenu.MenuItems(0).MenuItems(1).MenuItems(1) 
cmiLarge = label1ContextMenu.MenuItems(0).MenuItems(1).MenuItems(2)'We use these to track which menu items are checked
'This is made more complex because we have both a menu and a context menu
miMainFormatFontChecked = mmiArial
miMainFormatSizeChecked = mmiMedium
miContextFormatFontChecked = cmiArial
miContextFormatSizeChecked = cmiMediumEnd Sub'File->Exit Menu item handler
Private Sub FileExit_Clicked(sender As object, e As System.EventArgs)
Me.Close
End Sub'File->Open Menu item handler
Private Sub FileOpen_Clicked(sender As object, e As System.EventArgs)
MessageBox.Show("And why would this open a file?")
End Sub'Format->Font Menu item handler
Private Sub FormatFont_Clicked(sender As object, e As System.EventArgs)Dim miClicked As MenuItem = CType(sender, MenuItem)miMainFormatFontChecked.Checked = false
miContextFormatFontChecked.Checked = falsefontFace = miClicked.Text.Remove(0,1) 'Strip off & from menu item textIf (fontFace = "Arial") Then
miMainFormatFontChecked = mmiArial
miContextFormatFontChecked = cmiArial
Else If (fontFace = "Times New Roman") Then
miMainFormatFontChecked = mmiTimesNewRoman
miContextFormatFontChecked = cmiTimesNewRoman
Else
miMainFormatFontChecked = mmiCourier
miContextFormatFontChecked = cmiCourier
End If 
miMainFormatFontChecked.Checked = true
miContextFormatFontChecked.Checked = truelabel1.Font = new Font(fontFace, fontSize)End Sub'Format->Size Menu item handler
Private Sub FormatSize_Clicked(sender As object, e As System.EventArgs)Dim miClicked As MenuItem = CType(sender, MenuItem)miMainFormatSizeChecked.Checked = false
miContextFormatSizeChecked.Checked = falseDim fontSizeString As String = miClicked.TextIf (fontSizeString = "&Small") Then
miMainFormatSizeChecked = mmiSmall
miContextFormatSizeChecked = cmiSmall
fontSize = FontSizes.Small 
Else If (fontSizeString = "&Large") 
miMainFormatSizeChecked = mmiLarge
miContextFormatSizeChecked = cmiLarge
fontSize = FontSizes.Large 
Else 
miMainFormatSizeChecked = mmiMedium
miContextFormatSizeChecked = cmiMedium
fontSize = FontSizes.Medium 
End IfmiMainFormatSizeChecked.Checked = true
miContextFormatSizeChecked.Checked = truelabel1.Font = new Font(fontFace, fontSize)
End Sub
'Clean up any resources being used
Overrides Public Sub Dispose()
MyBase.Dispose
components.Dispose
End Sub 
Private Sub InitializeComponent() Me.components = new System.ComponentModel.Container()
Me.label1 = new System.WinForms.Label()
Me.mainMenu = new System.WinForms.MainMenu()
Me.label1ContextMenu = new System.WinForms.ContextMenu()Me.AutoScaleBaseSize = new System.Drawing.Size(5, 13)
Me.Text = "Menus 'R Us"
Me.Menu = mainMenu
Me.ClientSize = new System.Drawing.Size(392, 117)label1.Anchor = System.WinForms.AnchorStyles.TopLeftRight
label1.BackColor = System.Drawing.Color.LightSteelBlue
label1.ContextMenu = label1ContextMenu
label1.Location = new System.Drawing.Point(16, 24)
label1.Text = "Right Click on me - I have a context menu!"
label1.TabIndex = 0
label1.Size = new System.Drawing.Size(360, 50)Me.Controls.Add(label1)
End Sub
'Run the application
'The main entry point for the application
Shared Sub Main()
System.WinForms.Application.Run(New Menus())
End SubEnd ClassEnd Namespace