Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0125: Ein einfaches Kontextmenu erstellen

 von 

Beschreibung

In diesem Tipp wird veranschaulicht, wie ein Kontextmenu erstellt werden kann. Es werden bewusst nur die notwendingen Schritte gezeigt, um das Konzept zu erläutern.

Eine zweite Möglichkeit ist es, ein Kontextmenü vollständig im FormDesigner einzurichten, so dass nur noch die Ereignisbehandlung zu programmieren ist (den Rumpf generiert hier der Designer). Die Einrichtung im Designer kann so in folgenden Schritten erfolgen:
1) Ein ContextMenuStrip aus der Toolbox auf die Form ziehen.
2) Alle MenuItems darin anlegen, beschriften und sinnvoll benennen
3) Am Steuerelement, für welches das ContextMenu gelten soll, per ContextMenustrip-Property festlegen, welcher ContextMenustrip sich bei Rechtsklick öffnen soll.
4) Ein Doppelklick auf ein MenuItem generiert den Click-Eventhandler und öffnet den Code-Editor.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, .NET Compact Framework 1.0, .NET Compact Framework 2.0, .NET Framework 4

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008, Visual Basic 2010

Download:

Download des Beispielprojektes [11,43 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2008
' Option Strict:    An
' Option Explicit:  An
' Option Infer:     Aus
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Deployment
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'  - System.Core
'  - System.Xml.Linq
'  - System.Data.DataSetExtensions
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'  - System.Linq
'  - System.Xml.Linq
'

' ##############################################################################
' ################################# Form1.vb ###################################
' ##############################################################################
Public Class Form1
    ' Das Kontextmenu in das alle Einträge kommen
    Private myMenu As New ContextMenuStrip

    Private Sub Form1_FormClosed(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.FormClosedEventArgs) _
            Handles Me.FormClosed

        myMenu.Dispose()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load

        Me.CreateKontextMenu()
    End Sub

    ' Öffnen des Kontextmenus
    Private Sub Form1_MouseClick(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.MouseEventArgs) _
            Handles Me.MouseClick

        If e.Button = Windows.Forms.MouseButtons.Right Then
            Me.myMenu.Show(Me, e.Location)
        End If
    End Sub

    ' Erzeugt das Kontextmenu
    Public Sub CreateKontextMenu()
        ' Die Hauptmenus
        Dim mItem1 As ToolStripMenuItem = Me.CreateMenuItem("MainMenu1")
        Dim mItem2 As ToolStripMenuItem = Me.CreateMenuItem("MainMenu2")
        Dim mItem3 As ToolStripMenuItem = Me.CreateMenuItem("MainMenu3")

        ' Ein Item mit dem nun alle Untermenus erzeugt werden
        Dim subItem As ToolStripMenuItem
        For i As Integer = 1 To 4
            ' Item erzeugen
            subItem = Me.CreateMenuItem(mItem2.Text & " - SubMenu" & i.ToString)
            ' Item als SubMenu hinzufügen
            Me.AddSubItem(mItem2, subItem)
        Next

        ' Nun alle Hauptmenus in das Kontextmenu eintragen
        Me.myMenu.Items.Add(mItem1)
        Me.myMenu.Items.Add(New ToolStripSeparator)
        Me.myMenu.Items.Add(mItem2)
        Me.myMenu.Items.Add(New ToolStripSeparator)
        Me.myMenu.Items.Add(mItem3)
    End Sub

    ' Liefert ein ToolStripMenuItem zurück, dessen Click von 
    ' ContextMenu_Click behandelt wird.
    Private Function CreateMenuItem(ByVal text As String, _
            Optional ByVal name As String = "") As ToolStripMenuItem

        ' Einen Event Handler erstellen
        Dim evH As New EventHandler(AddressOf ContextMenu_Click)
        ' Ein neues MenuItem erzeugen
        Dim tsmi As New ToolStripMenuItem(text, Nothing, evH, name)

        Return tsmi
    End Function

    ' Fügt ein MenuItem als SubItem an ein betsehendes MenuItem an
    Private Sub AddSubItem(ByVal owner As ToolStripMenuItem, _
            ByVal item As ToolStripMenuItem)

        ' Item als DropDownMenu dem OwnerMenu hinzufügen.
        owner.DropDownItems.Add(item)
        ' Nun den Event des Besitzers abschalten, denn dieser soll nichts
        ' auslösen.
        RemoveHandler owner.Click, AddressOf ContextMenu_Click
    End Sub

    Private Sub ContextMenu_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim tsmi As ToolStripMenuItem = DirectCast(sender, ToolStripMenuItem)
        MsgBox("ContextMenu - " & tsmi.Text & " was clicked!")
    End Sub
End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.