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

Antwort vom

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 normale als auch ownerdrawn-Menüs. Die Standard-API und die Windows Forms-Menüklassen (`MenuItem`, `ContextMenu`) bieten keine direkte Möglichkeit, GIF- oder PNG-Bilder als Menüicons zu verwenden. **ABER:** Wenn du ein **OwnerDraw**-Menü verwendest, hast du die volle Kontrolle über das Zeichnen der Menüeinträge. Das bedeutet, du kannst im `DrawItem`-Event **beliebige Grafiken** zeichnen, also auch PNG oder GIF (inklusive Transparenz). **Vorgehen:** 1. Lade das Bild (PNG, GIF) als `Image`-Objekt (z.B. mit `Image.FromFile`). 2. Im `DrawItem`-Event des Menüeintrags kannst du das Bild mit `e.Graphics.DrawImage` zeichnen. **Beispiel:** ```vb ' Bild laden (z.B. PNG) Dim myImage As Image = Image.FromFile("C:\pfad\bild.png") ' Im DrawItem-Event: Private Sub MenuItem_DrawItem(sender As Object, e As DrawItemEventArgs) ' Bild zeichnen e.Graphics.DrawImage(myImage, e.Bounds.Left, e.Bounds.Top, 16, 16) ' Text daneben zeichnen e.Graphics.DrawString(CType(sender, MenuItem).Text, e.Font, Brushes.Black, e.Bounds.Left + 20, e.Bounds.Top) End Sub ``` **Wichtig:** - Transparenz von PNGs wird unterstützt, GIF-Animationen jedoch nicht (es wird nur das erste Frame angezeigt). - Du musst das OwnerDraw-Flag für den Menüeintrag setzen: `MenuItem.OwnerDraw = True`. **Fazit:** Ja, mit OwnerDraw kannst du in VB.NET 2003 auch PNG- oder GIF-Bilder in ContextMenüs verwenden, aber du musst das Zeichnen selbst übernehmen. Standardmäßig werden nur Icons unterstützt. Weitere Infos zu OwnerDraw-Menüs in .NET findest du z.B. bei Microsoft: [https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.menuitem.ownerdraw](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.menuitem.ownerdraw)

Verwandte Fragen

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

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...

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 der...

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 Steuer...

Wie kann ich mit VB.NET 2003 eine Liste aller Sektionen aus einer INI-Datei auslesen?

Um mit VB.NET 2003 eine Liste aller Sektionen (Sections) einer INI-Datei zu erhalten, kannst du die Windows-API-Funktion GetPrivateProfileSectionNames verwenden. Diese Funktion liest alle Sektionsname...

Wie erhalte ich in VB.NET 2003 eine Rückmeldung, wenn das Verschieben einer Datei in den Papierkorb abgebrochen wird?

In VB.NET 2003 gibt es keine eingebaute, direkte Möglichkeit, den Abbruch (z.B. durch den Benutzer) beim Verschieben einer Datei in den Papierkorb zu erkennen, da die Standardmethoden wie File.De...

Wie kann ich in VB.NET 2003 den Papierkorb verwenden?

In VB.NET 2003 gibt es keine eingebaute .NET-Klassenbibliothek, um Dateien direkt in den Windows-Papierkorb zu verschieben. Du kannst jedoch die Windows-API-Funktion SHFileOperation aus der Shell32.dl...

Warum funktioniert 'TextBox1.ContextMenu = Nothing' in VB.NET 2003 nicht?

In VB.NET 2003 (also .NET Framework 1.1) gibt es die Eigenschaft ContextMenu für Steuerelemente wie TextBox. Allerdings akzeptiert diese Eigenschaft kein Nothing (bzw. null), um das Kontextmen&uu...

Wie deaktiviere ich in VB.NET 2003 das ContextMenu einer TextBox, um die rechte Maustaste anderweitig zu nutzen?

Um in VB.NET 2003 das Standard-Contextmenü einer TextBox zu deaktivieren und die rechte Maustaste für eigene Zwecke zu verwenden, kannst du das ContextMenu der TextBox auf Nothing setzen und...

Wie prüfe ich in VB.NET 2003, ob ein String sowohl Buchstaben als auch Ziffern enthält?

Um in VB.NET 2003 zu prüfen, ob ein String neben Buchstaben auch Ziffern enthält, kannst du eine Schleife verwenden, die durch jeden Buchstaben des Strings geht und prüft, ob mindestens...

Wie löscht man in VB.NET 2003 eine Spalte aus einem ListView?

In VB.NET 2003 kannst du eine Spalte (Column) aus einem ListView entfernen, indem du sie aus der Columns-Sammlung des ListView löschst. Das geht zum Beispiel so: vb.net ' Angenommen, du m&o...