vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Standard-ContextMenu unterdrücken 
Autor: spatzimatzi
Datum: 02.02.15 10:18

Hallo,
möchte, dass das Standard-ContextMenu abgeschaltet wird.

Ausgangslage:
In einem Modul werden alle Controls einer Form gelesen und einheitlich formatiert
Was stört ist, dass unter anderem die ComboBoxen ein Stand-ContextMenu aufweisen. Diese soll jedoch nicht erscheinen.
Bei einigen ComboFelder habe ich jedoch ein ContextMenu vorgegeben. Diese erscheinen auch richtig

Mein Wunsch:
Wenn ein ContextMenu vorhanden ist, dann keine Aktion, ansonsten leeres ContextMenu zuweisen
Dim CMSLeer As ContextMenuStrip = New ContextMenuStrip
 
If ... Then
  ComboBox.ContextMenuStrip = CMSLeer
End If
Meine Frage
Wie kann ich erkennen, dass ein Standard-ContextMenu vorliegt

Vielen Dank
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Standard-ContextMenu unterdrücken 
Autor: Manfred X
Datum: 02.02.15 16:55

Ich nehme an: Windows-Forms-Projekt.

Du könntest für das Formular ein leeres Contextmenu deklarieren
Dim cm As New ContextMenu
und im Code als Contextmenu den Combos zuweisen, die kein CM haben sollen.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Standard-ContextMenu unterdrücken 
Autor: spatzimatzi
Datum: 02.02.15 17:17

Hallo Manfred X,
ja, es ist ein Windows-Forms-Projekt.

Deinen Vorschlag hatte ich ja auch schon angesprochen
Das Problem ist nur: Wie erkenne ich, das schon ein ContextMenu zugeordnet wurde.
In dem Fall würde ich keine Aktion einleiten.
Im anderen Fall würde ich ein leeres ContextMenu zuordnen.

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Standard-ContextMenu unterdrücken 
Autor: Manfred X
Datum: 02.02.15 17:29

Die Net-Controls verwenden intern die Controls, die von Windows allgemein zur Verfügung gestellt werden.
Falls kein Contextmenu zugewiesen worden ist, wird deshalb deren Standard-Contextmenu angezeigt.

So sollte es funktionieren ... (cm = new Contextmenu)
        For Each ctl As Control In Me.Controls
            If TypeOf ctl Is ComboBox Then
                Dim cb As ComboBox = DirectCast(ctl, ComboBox)
                With cb
                    If .ContextMenu Is Nothing AndAlso .ContextMenuStrip Is _
                      Nothing Then
                        .ContextMenu = cm
                    End If
                End With
            End If
        Next ctl
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Standard-ContextMenu unterdrücken 
Autor: spatzimatzi
Datum: 02.02.15 18:27

Hallo Manferd X,
klappt prima. Vielen Dank

Leider brauche ich noch Hintergrund-Info's, damit ich es auch verstehe.

Wenn ich einer ComboBox ein Menu zuordnen möchte, dann erzeuge ich ein ContextMenuStrip von Hand
Dann gehe ich in die Eigenschaften der ComboBox und weise der Eigenschaft ContextMenuStrip mein von Hand erstelltes ContextMenuStrip zu.
In Deinem Beispiel-Programm fragst Du ContextMenu bzw. ContextMenuStrip ab und weisst bei True ein ContextMenu zu und kein Strip

Das verstehe ich nicht? Kannst Du mir das erklären?

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Ergänzende Hinweise 
Autor: Kuno60
Datum: 02.02.15 18:27

Hallo,

wird die Combobox als Combobox verwendet, also als Kombination aus Textbox und Listbox, so hat sie auch das gleiche Standard-ContextMenu wie eine Textbox.
Wird sie nur als Listbox verwendet (Eigenschaft: DropDownStyle = DropDownList), so hat sie kein ContextMenu.

Das Beispiel von Manfred funktioniert und kann ab FW 3.5 auch so geschrieben werden:
    For Each cb In Me.Controls.OfType(Of ComboBox)()
      If cb.ContextMenu Is Nothing AndAlso cb.ContextMenuStrip Is Nothing Then
        cb.ContextMenu = New ContextMenu
      End If
    Next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Standard-ContextMenu unterdrücken 
Autor: Manfred X
Datum: 02.02.15 18:32

Das Contextmenu ist eine Alternative zum Contextmenustrip, gilt zwar als veraltet,
ist aber dem Strip übergeordnet.
Um das Windows-Menü zu unterdrücken, muß eine der beiden Eigenschaften
gesetzt worden sein. Deshalb sind in Deinem Fall beide zu prüfen.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Ergänzende Hinweise 
Autor: Manfred X
Datum: 02.02.15 18:38

Hallo!

Nicht so ganz ..

In deinem Fall wird für jede Combo ohne CM ein neues leeres CM-Objekt erstellt.
Wenn man auf Modulebene ein Objekt erstellt, können Referenzen darauf
zugewiesen werden.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Ergänzende Hinweise 
Autor: Kuno60
Datum: 02.02.15 19:41

Ja da hast du Recht, es langt ein ContextMenu.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel