Menu Object Changes

Snoops

   

 
Migrating to .NET: A Pragmatic Path to Visual Basic .NET, Visual C++ .NET, and ASP.NET
By Dhananjay  Katre, Prashant  Halari, Narayana  Rao  Surapaneni, Manu  Gupta, Meghana  Deshpande

Table of Contents
Chapter 4.   Post-migration Changes


Menus can be very easily created in Visual Basic 6.0 Forms using the Menu Editor. They can also be modified at runtime and they can be displayed as main menus as well as context menus .

Visual Basic .NET provides two separate controls, MainMenu and ContextMenu . Both are available in the Visual Studio .NET control toolbox at design time. These controls can be added to the Visual Basic .NET Form at design time, or they can be created dynamically during runtime. Let us look at some code examples to evaluate the issue of migrating menu controls to Visual Basic .NET.

CODE EXAMPLES

Example 13

In Visual Basic, create two main menu controls called File and Exit. When user clicks on the Exit menu, the program ends. When the user clicks on the File menu, a submenu called List appears. When the user clicks on the List submenu, a Drive list box, a directory list box, and a file list box are displayed to the user. The user can get the list of the files in any drive and directory. Note that access keys have been set for all the menu items. The file menu can be accessed from the keyboard with the ALT + F key combination. Note that a shortcut key (CTRL + L) has been assigned to invoke the List functionality from the keyboard without having to navigate through the menu. Figure 4-6 shows the screen in design mode in Visual Basic 6.0. The following code is in the Menu2-VB folder for this chapter:

Figure 4-6. File Menu in Design mode.

graphics/04fig06.gif

 graphics/icon01.gif Private Sub Dir1_Change()     File1.Path = Dir1.Path  End Sub  Private Sub Drive1_Change()     Dir1.Path = Drive1.Drive     File1.Path = Dir1.Path  End Sub  Private Sub Form_Load()     Drive1.Visible = False     Dir1.Visible = False     File1.Visible = False  End Sub  Private Sub mnuExit_Click()     End  End Sub  Private Sub mnuList_Click()     Drive1.Visible = True     Dir1.Visible = True     File1.Visible = True  End Sub 

The following equivalent Visual Basic .NET code is in the Menu2-VB.NET folder for this chapter:

 graphics/icon01.gif Public WithEvents mnuList As System.Windows.Forms. _   MenuItem  Public WithEvents MnuFile As System.Windows.Forms. _   MenuItem  Public WithEvents mnuExit As System.Windows.Forms. _   MenuItem  Public MainMenu1 As System.Windows.Forms.MainMenu  Me.MainMenu1 = New System.Windows.Forms.MainMenu  Me.MnuFile = New System.Windows.Forms.MenuItem  Me.mnuList = New System.Windows.Forms.MenuItem  Me.mnuExit = New System.Windows.Forms.MenuItem  MainMenu1.MenuItems.AddRange(New System.Windows.Forms. _   MenuItem(){Me.MnuFile, Me.mnuExit})  Me.mnuList.Index = 0  MnuFile.MenuItems.AddRange(New System.Windows.Forms. _   MenuItem(){Me.mnuList})  Me.Menu = MainMenu1  Private Sub Dir1_Change(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles Dir1.Change     File1.Path = Dir1.Path  End Sub  Private Sub Drive1_SelectedIndexChanged(ByVal _   eventSender As System.Object, ByVal eventArgs As _    System.EventArgs) Handles Drive1.SelectedIndexChanged     Dir1.Path = Drive1.Drive     File1.Path = Dir1.Path  End Sub  Private Sub Form1_Load(ByVal eventSender As  _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles MyBase.Load     Drive1.Visible = False     Dir1.Visible = False     File1.Visible = False  End Sub  Public Sub mnuExit_Popup(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles mnuExit.Popup     mnuExit_Click(eventSender, eventArgs)  End Sub  Public Sub mnuExit_Click(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles mnuExit.Click     End  End Sub  Public Sub mnuList_Popup(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles mnuList.Popup     mnuList_Click(eventSender, eventArgs)  End Sub  Public Sub mnuList_Click(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles mnuList.Click     Drive1.Visible = True     Dir1.Visible = True     File1.Visible = True  End Sub 

Note how the menu objects are created. These are declared to be of type MenuItem that reside in the namespace System.Windows.Form . The main menu for the form is declared to be of type MainMenu , and the other menu items are added to the main menu. When the project is upgraded to Visual Basic .NET, there are no issues, and the code behaves in the same manner and gives the same functionality as in Visual Basic 6.0. The functionality of the access keys is maintained in Visual Basic .NET. The File menu can be accessed from the keyboard with the ALT + F key combination. Note that even the shortcut key assigned to the List menu (CTRL + L) works in Visual Basic .NET.

In this example, another set of controls is also upgraded. The DriveListBox , DirListBox, and the FileListBox are no longer available in Visual Basic .NET. The OpenFileDialog and the SaveFileDialog controls in Visual Basic .NET provide the same functionality as these controls, and the upgrade wizard automatically supports functionality for these controls through the Microsoft. VisualBasic.Compatibility namespace.

Example 14

This example demonstrates the use of context menu and the issues faced in the upgrade as well as what the developer has to do in Visual Basic .NET to get the code working. In this example a normal form with two menu items is created. The first menu item is called Edit and it has two submenus, cut and copy. The second menu item is called Exit, which is used to terminate the application.

The form has two labels. When the user right-clicks on the first label, the context menu (with the options cut and copy) appears. When the user clicks on copy, contents of label1 are copied to label2. If the user clicks on cut, the contents of label1 are copied to label2, and the contents of label1 are emptied.

The following code snippet shows the logic for implementing the context menu in Visual Basic 6.0 code. The logic for the context menu is implemented in the mouse down event of Label1. The PopupMenu command is used to invoke the specified menu as the context menu. The following code is in the ContextMenu-VB folder for this chapter:

 graphics/icon01.gif Private Sub Label1_MouseUp(Button As Integer, Shift As _   Integer, X As Single, Y As Single)     If Button = vbRightButton Then        PopupMenu mnuEdit     End If  End Sub  Private Sub mnuCopy1_Click()     Label2.Caption = Label1.Caption  End Sub  Private Sub mnuCut_Click()     Label2.Caption = Label1.Caption     Label1.Caption = ""  End Sub  Private Sub mnuExit_Click()     End  End Sub 

Upgrading and compiling this code results in compilation errors. Visual Basic .NET does not have an equivalent for the popup menu.

Visual Basic .NET has a different mechanism for implementing context menus. To make the preceding code work in Visual Basic .NET, first, select a context menu from the toolbox and drop it into the form. Edit the menu and add the submenu items (cut and copy) as in the example. Put the following code snippets in the click events of the cut and copy menu items. The following equivalent Visual Basic .NET code is in the ContextMenu-VB.NET-Modified folder for this chapter:

 graphics/icon01.gif Public Sub mnuCopy1_Popup(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles mnuCopy1.Popup     mnuCopy1_Click(eventSender, eventArgs)  End Sub  Public Sub mnuCopy1_Click(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles mnuCopy1.Click     Label2.Text = Label1.Text  End Sub  Public Sub mnuCut_Popup(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles mnuCut.Popup     mnuCut_Click(eventSender, eventArgs)  End Sub  Public Sub mnuCut_Click(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles mnuCut.Click     Label2.Text = Label1.Text     Label1.Text = ""  End Sub  Public Sub mnuExit_Popup(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles mnuExit.Popup     mnuExit_Click(eventSender, eventArgs)  End Sub  Public Sub mnuExit_Click(ByVal eventSender As _   System.Object, ByVal eventArgs As System.EventArgs) _    Handles mnuExit.Click     End  End Sub  Private Sub MenuItem1_Click(ByVal sender As _   System.Object, ByVal e As System.EventArgs) Handles _    MenuItem1.Click     Label2.Text = Label1.Text     Label1.Text = ""  End Sub  Private Sub MenuItem2_Click(ByVal sender As _   System.Object, ByVal e As System.EventArgs) Handles _    MenuItem2.Click     Label2.Text = Label1.Text  End Sub 

As shown, in Visual Basic any menu can be made into a context menu. However, Visual Basic .NET offers two different objects, MainMenu for normal menus displayed on forms and ContextMenu for popup menus. All controls on the form have a property called ContextMenu where the developer can specify which context menu to pop up.


Snoops

   
Top


Migrating to. NET. A Pragmatic Path to Visual Basic. NET, Visual C++. NET, and ASP. NET
Migrating to. NET. A Pragmatic Path to Visual Basic. NET, Visual C++. NET, and ASP. NET
ISBN: 131009621
EAN: N/A
Year: 2001
Pages: 149

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net