Wie kann ich in VB.NET 2003 einem Contextmenü Icons hinzufügen?

Antwort

In **VB.NET 2003** (Visual Studio .NET 2003) gibt es für das Standard-`ContextMenu`-Steuerelement keine direkte Unterstützung für Icons neben den Menüeinträgen. Das Hinzufügen von Icons zu einem Kontextmenü ist erst ab späteren .NET-Versionen mit dem `ContextMenuStrip`-Steuerelement möglich. **In VB.NET 2003 gibt es zwei gängige Workarounds:** ### 1. Eigenes Zeichnen des Menüs (Owner Draw) Du kannst das Menü als "Owner Draw" deklarieren und die Icons selbst zeichnen. Das ist allerdings recht aufwändig und erfordert einiges an Code. **Kurzes Beispiel:** 1. Setze die `OwnerDraw`-Eigenschaft jedes `MenuItem` auf `True`. 2. Behandle die `DrawItem`- und `MeasureItem`-Ereignisse. ```vb ' Beispiel für ein MenuItem mit Icon Dim menuItem As New MenuItem("Öffnen") menuItem.OwnerDraw = True AddHandler menuItem.DrawItem, AddressOf menuItem_DrawItem AddHandler menuItem.MeasureItem, AddressOf menuItem_MeasureItem ' Füge das MenuItem dem ContextMenu hinzu ContextMenu1.MenuItems.Add(menuItem) ' Beispiel-Handler Private Sub menuItem_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Dim icon As Icon = New Icon("C:\Pfad\zu\deinem\icon.ico") e.Graphics.DrawIcon(icon, e.Bounds.Left, e.Bounds.Top) e.Graphics.DrawString(CType(sender, MenuItem).Text, e.Font, Brushes.Black, e.Bounds.Left + 20, e.Bounds.Top) End Sub Private Sub menuItem_MeasureItem(ByVal sender As Object, ByVal e As MeasureItemEventArgs) e.ItemHeight = 20 e.ItemWidth = 100 End Sub ``` ### 2. Drittanbieter-Komponenten verwenden Es gibt kommerzielle und freie Komponenten, die erweiterte Menüs mit Icon-Unterstützung bieten, z.B. [DevExpress](https://www.devexpress.com/), [ComponentOne](https://www.grapecity.com/componentone), oder [Infragistics](https://www.infragistics.com/). --- **Fazit:** Im Standard-`ContextMenu` von VB.NET 2003 ist das Hinzufügen von Icons nur über OwnerDraw-Workarounds oder Drittanbieter-Komponenten möglich. Einfache native Unterstützung gibt es erst ab .NET 2.0 mit `ContextMenuStrip`.

Frage stellen und sofort Antwort erhalten

Verwandte Fragen

Können in VB.NET 2003 außer Icons auch GIF/PNG für ownerdrawn Contextmenüs verwendet werden?

In **VB.NET 2003** (also .NET Framework 1.1) ist die Unterstützung für Bilder in Menüs standardmäßig auf **Icons** (also `.ico`-Dateien) beschränkt. Das betrifft sowohl... [mehr]

Wie kann ich in VB.NET 2003 den Index eines ausgewählten Contextmenü-Items ermitteln?

In VB.NET 2003 kannst du den Index eines gewählten ContextMenu-Items herausfinden, indem du im Event-Handler (z.B. für das Click-Ereignis) das `MenuItem`-Objekt mit der `IndexOf`-Methode in... [mehr]

Wie kann ich in VB.NET 2003 einem per Code angezeigten Kontextmenü den Fokus geben?

In VB.NET 2003 gibt es keine direkte Methode, einem ContextMenu explizit den Fokus zu geben, da das `ContextMenu`-Steuerelement (im Gegensatz zu neueren `ContextMenuStrip`) kein eigenständiges St... [mehr]

Können in VB.NET 2003 in einer ImageList neben Icons auch deren Namen gespeichert werden?

In **VB.NET 2003** (Visual Studio .NET 2003) bietet die **ImageList**-Komponente keine Möglichkeit, neben den Bildern (Icons) auch deren Namen oder andere Metadaten direkt zu speichern. Die **Ima... [mehr]

Welchen Einfluss haben überflüssig importierte Klassen mittels Imports in VB.NET 2003 auf ein Programm?

In VB.NET 2003 (also .NET Framework 1.1) hat das Hinzufügen von Imports-Anweisungen für nicht verwendete Namespaces oder Klassen in der Regel **keinen nennenswerten Einfluss auf die Grö... [mehr]

"if shinfo.hicon <> IntPtr.Zero Then ..." verursacht in VB.NET 2003 einen Fehler?

Ja, in **VB.NET 2003** kann folgender Vergleich zu einem Fehler führen: ```vb If shinfo.hIcon <> IntPtr.Zero Then ' ... End If ``` **Grund:** In VB.NET 2003 (also .NET Framewor... [mehr]

Wie speichere ich in VB.NET 2003 ein mit SHGetFileInfo extrahiertes Icon unter einem anderen Namen?

Um ein mit `SHGetFileInfo` extrahiertes Icon in VB.NET 2003 unter einem anderen Namen zu speichern, gehst du wie folgt vor: 1. **Icon extrahieren:** Mit `SHGetFileInfo` erhältst du einen Handle... [mehr]

Wie kann ich in VB.NET 2003 den Fehler 'Der Vorgang "read" konnte nicht auf dem Speicher...' abfangen?

Der Fehler „Der Vorgang 'read' konnte nicht auf dem Speicher...“ ist kein typischer .NET-Fehler, sondern ein Zugriffsverletzungsfehler (Access Violation), der meist auftritt, wen... [mehr]

Welchen Datentyp hat der Wert für PictureBox.SizeMode in VB.NET 2003?

Der Wert für die Eigenschaft `PictureBox.SizeMode` in VB.NET 2003 hat den Datentyp [`PictureBoxSizeMode`](https://learn.microsoft.com/de-de/dotnet/api/system.windows.forms.pictureboxsizemode?view... [mehr]

Wie lade ich mit VB.NET 2003 ein Icon als Image in eine PictureBox?

Um in VB.NET 2003 ein Icon (.ico-Datei) in eine PictureBox als Image anzuzeigen, musst du das Icon zunächst in ein Bitmap-Objekt umwandeln, da die PictureBox kein Icon direkt anzeigen kann, sonde... [mehr]