Context Menu in Windows Forms Diagram

Built-in context menu

The WinForms Diagram provides built-in context menu support to the Diagram.

All available tools for the WinForms Diagram control such as File options, Edit options, Action options, Layout, Connectors, and Shapes are listed in the built-in context menu.

Use Case Scenarios

This feature enables easy access of frequently used options.

Properties

Property Description Data Type Default Value

DefaultContextMenuEnabled

Used to enable or disable the default context menu. Boolean true

Enabling Default Context Menu

You can enable the default context menu using the DefaultContextMenuEnabled property.

The following code illustrates how to enable the default context menu:

//show default context menu
diagram1.DefaultContextMenuEnabled = true;
'show default context menu
diagram1.DefaultContextMenuEnabled = True

Diagram Context-Menu

The following code illustrates how to disable the default context menu:

//hide default context menu
diagram1.DefaultContextMenuEnabled = false;
'hide default context menu
diagram1.DefaultContextMenuEnabled = False

To view a sample:

  1. Open the Syncfusion® Dashboard.
  2. Click the Windows Forms drop-down list and select Run Locally Installed Samples.
  3. Navigate to Diagram Samples > Product Showcase > Diagram Builder.

Conditionally show or hide context menu items at run time

You can conditionally show or hide context menu items at run time. In this, you can make a custom context menu by clearing the default context menu items. The following code example illustrates how to create the context menu item based on diagram elements selection.

The following code example illustrates how to define those.

//Used to clear the default context menu items
diagram1.ContextMenuStrip.Items.Clear();

//To initialize custom menus for diagram context menu items
System.Windows.Forms.ToolStripMenuItem fillToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
System.Windows.Forms.ToolStripMenuItem blueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
System.Windows.Forms.ToolStripMenuItem strokeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
System.Windows.Forms.ToolStripMenuItem blueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();

fillToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {blueToolStripMenuItem});

//adding properties to the items
fillToolStripMenuItem.Name = "fillToolStripMenuItem";
fillToolStripMenuItem.Size = new System.Drawing.Size(210, 24);
fillToolStripMenuItem.Text = "Fill";
blueToolStripMenuItem.Name = "blueToolStripMenuItem";
blueToolStripMenuItem.Size = new System.Drawing.Size(121, 26);
blueToolStripMenuItem.Text = "Blue";
blueToolStripMenuItem.Click += new System.EventHandler(blueToolStripMenuItem_Click);
blueToolStripMenuItem1.Name = "blueToolStripMenuItem1";
blueToolStripMenuItem1.Size = new System.Drawing.Size(121, 26);
blueToolStripMenuItem1.Text = "Blue";
blueToolStripMenuItem1.Click += new System.EventHandler(blueToolStripMenuItem1_Click);
strokeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {blueToolStripMenuItem1});
strokeToolStripMenuItem.Name = "strokeToolStripMenuItem";
strokeToolStripMenuItem.Size = new System.Drawing.Size(210, 24);
strokeToolStripMenuItem.Text = "Stroke";
this.diagram1.ContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {fillToolStripMenuItem, strokeToolStripMenuItem});

//To register NodeMouseEnter event to diagram controller
diagram1.EventSink.NodeMouseEnter += EventSink_NodeMouseEnter;

// NodeMouseEnter handler - show/hide context menu item based on selected objects (define at class scope)
private void EventSink_NodeMouseEnter(NodeMouseEventArgs evtArgs)
{
    //To show/hide context menu item based on selected objects in diagram
    if (evtArgs.Node is Node)
    {
        diagram1.ContextMenuStrip.Items[0].Visible = true;
        diagram1.ContextMenuStrip.Items[1].Visible = false;
    }
    else if (evtArgs.Node is ConnectorBase)
    {
        diagram1.ContextMenuStrip.Items[0].Visible = false;
        diagram1.ContextMenuStrip.Items[1].Visible = true;
    }
}
'Used to clear the default context menu items
diagram1.ContextMenuStrip.Items.Clear()

'To initialize custom menus for diagram context menu items
Dim fillToolStripMenuItem As New System.Windows.Forms.ToolStripMenuItem()
Dim blueToolStripMenuItem As New System.Windows.Forms.ToolStripMenuItem()
Dim strokeToolStripMenuItem As New System.Windows.Forms.ToolStripMenuItem()
Dim blueToolStripMenuItem1 As New System.Windows.Forms.ToolStripMenuItem()

fillToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {blueToolStripMenuItem})

'adding properties to the items
fillToolStripMenuItem.Name = "fillToolStripMenuItem"
fillToolStripMenuItem.Size = New System.Drawing.Size(210, 24)
fillToolStripMenuItem.Text = "Fill"
blueToolStripMenuItem.Name = "blueToolStripMenuItem"
blueToolStripMenuItem.Size = New System.Drawing.Size(121, 26)
blueToolStripMenuItem.Text = "Blue"
AddHandler blueToolStripMenuItem.Click, AddressOf blueToolStripMenuItem_Click
blueToolStripMenuItem1.Name = "blueToolStripMenuItem1"
blueToolStripMenuItem1.Size = New System.Drawing.Size(121, 26)
blueToolStripMenuItem1.Text = "Blue"
AddHandler blueToolStripMenuItem1.Click, AddressOf blueToolStripMenuItem1_Click
strokeToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {blueToolStripMenuItem1})
strokeToolStripMenuItem.Name = "strokeToolStripMenuItem"
strokeToolStripMenuItem.Size = New System.Drawing.Size(210, 24)
strokeToolStripMenuItem.Text = "Stroke"
Me.diagram1.ContextMenuStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {fillToolStripMenuItem, strokeToolStripMenuItem})

'To register NodeMouseEnter event to diagram controller
AddHandler diagram1.EventSink.NodeMouseEnter, AddressOf EventSink_NodeMouseEnter

' Event handler for the Blue fill menu item (define at class scope)
Private Sub blueToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs)
    ' Apply the blue fill to the selected node here
End Sub

' Event handler for the Blue stroke menu item (define at class scope)
Private Sub blueToolStripMenuItem1_Click(ByVal sender As Object, ByVal e As EventArgs)
    ' Apply the blue stroke to the selected node here
End Sub

' NodeMouseEnter handler - show/hide context menu item based on selected objects (define at class scope)
Private Sub EventSink_NodeMouseEnter(ByVal evtArgs As NodeMouseEventArgs)
    'To show/hide context menu item based on selected objects in diagram
    If TypeOf evtArgs.Node Is Node Then
        diagram1.ContextMenuStrip.Items(0).Visible = True
        diagram1.ContextMenuStrip.Items(1).Visible = False
    ElseIf TypeOf evtArgs.Node Is ConnectorBase Then
        diagram1.ContextMenuStrip.Items(0).Visible = False
        diagram1.ContextMenuStrip.Items(1).Visible = True
    End If
End Sub