| |
VB.NET - Ein- und UmsteigerStandard-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
| |
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.
| |
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 | |
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 | |
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
| |
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 | |
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.
| |
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.
| |
Re: Ergänzende Hinweise | | | Autor: Kuno60 | Datum: 02.02.15 19:41 |
| Ja da hast du Recht, es langt ein ContextMenu. | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|
|
|
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
|
|