ContextMenuStrip Control
The ContextMenuStrip control provides functionality of context menus in Visual Studio 2010 and .NET 4.0. A context menu is also known as a popup menu. A context menu appears when you right click on a Form or on a control.
In the previous versions of .NET, the context menu functionality was provided by the ContextMenu control. In .NET 4.0, the ContextMenu control is replaced with the ContextMenuStrip control.
In this article, we will discuss how to build context menu enabled Windows applications using ContextMenuStrip control in Visual Studio 2010.
Creating a Context Menu
To create a ContextMenuStrip control at design-time, you simply drag and drop a ContextMenuStrip control from Toolbox onto a Form in Visual Studio. After you drag and drop a ContextMenuStrip on a Form, the ContextMenuStrip1 is added to the Form and looks like Figure 1. Once a ContextMenuStrip is on the Form, you can add menu items and set its properties and events. If you noticed in Figure 1, first item of the ContextMenuStrip has text Type Here. You can actually start typing here.
Figure 1
If you notice in Figure 2, I type couple of menu items. As soon as you select a menu item, you will see automatically sub menu items areas are editable and you can keep going as many levels you like. I add two menu items and two sub menu items.
Figure 2
We can also create context menus at run-time. Even though you can create a ContextMenuStrip at run-time, it is recommended you create at design-time and then set the properties and methods at run-time.
First step to create a dynamic ContextMenuStrip is to create an instance of ContextMenuStrip class. The following code snippet creates a ContextMenuStrip control object.
C# Code:
ContextMenuStrip PopupMenu = new ContextMenuStrip();
VB.NET Code:
Dim PopupMenu As New ContextMenuStrip()
In the next step, you may set properties of a ContextMenuStrip control. The following code snippet sets background color, foreground color, Text, Name, and Font properties of a ContextMenuStrip.
C# Code:
PopupMenu.BackColor = Color.OrangeRed;
PopupMenu.ForeColor = Color.Black;
PopupMenu.Text = "File Menu";
PopupMenu.Font = new Font("Georgia", 16);
VB.NET Code:
PopupMenu.BackColor = Color.OrangeRed
PopupMenu.ForeColor = Color.Black
PopupMenu.Text = "File Menu"
PopupMenu.Font = New Font("Georgia", 16)
Once the ContextMenuStrip control is ready with its properties, the next step is to add the ContextMenuStrip to a Form. To do so, first we set ContextMenuStrip property and then use call the Show method to display the ContextMenuStrip.
The following code snippet adds a ContextMenuStrip control to the current Form and displays it when you right click on the Form.
C# Code:
this.ContextMenuStrip = PopupMenu;
PopupMenu.Show();
VB.NET Code:
Me.ContextMenuStrip = PopupMenu
PopupMenu.Show()
Setting ContextMenuStrip Properties
After you place a ContextMenuStrip control on a Form, the next step is to set properties.
The easiest way to set properties is from the Properties Window. You can open Properties window by pressing F4 or right click on a control and select Properties menu item. The Properties window looks like Figure 2.
Figure 2
Name
Name property represents a unique name of a ContextMenuStrip control. It is used to access the control in the code. The following code snippet sets and gets the name and text of a ContextMenuStrip control.
C# Code:
PopupMenu.Name = "PopupMenu";
VB.NET Code:
PopupMenu.Name = "PopupMenu"
Font
Font property represents the font of text of a ContextMenuStrip control. If you click on the Font property in Properties window, you will see Font name, size and other font options. The following code snippet sets Font property at run-time.
C# Code:
PopupMenu.Font = new Font("Georgia", 16);
VB.NET Code:
PopupMenu.Font = New Font("Georgia", 16)
Background and Foreground
BackColor and ForeColor properties are used to set background and foreground color of a ContextMenuStrip respectively. If you click on these properties in Properties window, the Color Dialog pops up.
Alternatively, you can set background and foreground colors at run-time. The following code snippet sets BackColor and ForeColor properties.
C# Code:
PopupMenu.BackColor = Color.OrangeRed;
PopupMenu.ForeColor = Color.Black;
VB.NET Code:
PopupMenu.BackColor = Color.OrangeRed
PopupMenu.ForeColor = Color.Black
The new ContextMenuStrip with background and foreground looks like Figure 4.
Figure 4
ContextMenuStrip Items
A Menu control is nothing without menu items. The Items property is used to add and work with items in a ContextMenuStrip. We can add items to a ContextMenuStrip at design-time from Properties Window by clicking on Items Collection as you can see in Figure 5.
Figure 5
When you click on the Collections, the String Collection Editor window will pop up where you can type strings. Each line added to this collection will become a ContextMenuStrip item. See Figure 6.
Figure 6
Now you may notice from Figure 6, each of the menu items have its own properties and you can set them anyway you like. For example, you can have a background, foreground or images setup for each item or you can also add a CheckBox and add a tooltip to an item.
There is a new feature added the ContextMenuStrip that was not available in previous version. Now you can add a MenuItem, ComboBox, Separator, or a TextBox controls to a ContextMenu. You can also give these menu items their Names and control from the code the way you like. How cool is that? We will discuss these controls in more details in the following section in this chapter.
A ToolStripMenuItem represents a menu items. The following code snippet creates a menu item at run-time and sets its properties.
C# Code:
// Create a Menu Item
ToolStripMenuItem FileMenu = new ToolStripMenuItem("File");
FileMenu.BackColor = Color.OrangeRed;
FileMenu.ForeColor = Color.Black;
FileMenu.Text = "File Menu";
FileMenu.Font = new Font("Georgia", 16);
FileMenu.TextAlign = ContentAlignment.BottomRight;
FileMenu.ToolTipText = "Click Me";
VB.NET Code:
Dim FileMenu As New ToolStripMenuItem("File")
FileMenu.BackColor = Color.OrangeRed
FileMenu.ForeColor = Color.Black
FileMenu.Text = "File Menu"
FileMenu.Font = New Font("Georgia", 16)
FileMenu.TextAlign = ContentAlignment.BottomRight
FileMenu.TextDirection = ToolStripTextDirection.Vertical90
FileMenu.ToolTipText = "Click Me"
Once a menu item is created, we can add it to the main menu by using ContextMenuStrip.Items.Add method. The following code snippet adds FileMenu item to the PopupMenu.
C# Code:
PopupMenu.Items.Add(FileMenu);
VB.NET Code:
PopupMenu.Items.Add(FileMenu)
Adding Menu Item Click Event Handler
The main purpose of a menu item is to add a click event handler and write code that we need to execute on the menu item click event handler. For example, on File >> New menu item click event handler, we may want to create a new file.
The simplest way to add an event handler, you double click on a menu item and the designer will add a click event handler for that menu item. You can also see and update it in the Events window as you can see in Figure 7.
Figure 7
We can also define and implement an event handler dynamically. The following code snippet defines and implements these events and their respective event handlers.
C# Code:
FileMenu.Click += new System.EventHandler(this.FileMenuItemClick);
private void FileMenuItemClick(object sender, EventArgs e)
{
MessageBox.Show("File menu item clicked");
}
VB.NET Code:
Dim FileMenuItem As New ToolStripMenuItem("File", Nothing, _
New EventHandler(AddressOf FileMenuItemClick))
Private Sub FileMenuItemClick (ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("File menu item clicked!")
End Sub
Display Image in a Menu Item
The Image property is used to set an image as part of a menu item with the text. If you go to the designer and select Image property, you will be asked to add an image to the application and the selected image will be displayed in the menu item before the text.
A menu item with an image looks like Figure 8.
Figure 8
We can also set the Image property at run-time. The following code snippet sets an image as a part of a menu item.
C# Code:
FileMenu.Image = Image.FromFile("C:\\Images\\Garden.jpg");
VB.NET Code:
FileMenu.Image = Image.FromFile("C:\Images\Garden.jpg")
Setting Image a Menu Item Background
The BackgroundImage property is used to set an image as background of a menu item. The BackgroundImageLayout is used to set the layout of the image. The following code snippet sets an image as background of a menu item.
C# Code:
FileMenu.BackgroundImage = Image.FromFile("C:\Images\Garden.jpg");
FileMenu.BackgroundImageLayout = ImageLayout.Tile;
VB.NET Code:
FileMenu.BackgroundImage = Image.FromFile("C:\Images\Garden.jpg")
FileMenu.BackgroundImageLayout = ImageLayout.Tile
Vertical Text in Menu Items
By default, the text of a menu is horizontal. You can change the direction of menu items by setting TextDirection property that is a type of ToolStrupTextDirection. The following code snippet sets the text direction of a menu item to vertical.
C# Code:
FileMenu.TextDirection = ToolStripTextDirection.Vertical90;
VB.NET Code:
FileMenu.TextDirection = ToolStripTextDirection.Vertical90
Set Tooltip of a Menu Item
The ToolTipText property is used to set the tooltip of a menu items.
C# Code:
FileMenu.ToolTipText = "Click Me";
VB.NET Code:
FileMenu.ToolTipText = "Click Me"
Menu Grip
By default, menus do not have a grip but we can show a grip by setting GripStyle property to visible. The following code snippet makes a menu grip visible.
C# Code:
PopupMenu.GripStyle = ToolStripGripStyle.Visible;
VB.NET Code:
PopupMenu.GripStyle = ToolStripGripStyle.Visible
Summary
In this article, we discussed discuss how to create menus using the ContextMenuStrip control. First we discussed how to create menus at design-time and run-time. After that we saw, how to set menus properties and click event handlers.