Entwickler-Ecke
WinForms - ContextMenu erstellen
VampireSilence - Fr 17.09.10 19:56
Titel: ContextMenu erstellen
Der Titel klingt erstmal einfach, im Designer ists auch kein Problem. Aber wenn ich versuche ein ContextMenu zur Laufzeit zu erstellen, bricht die Methode mal wieder einfach ab. Habe die Tipps aus meinem alten Thema (Einzelschritte, Try/Catch) beherzigt, aber diese führten hier leider auch nicht zum Erfolg.
Habe folgende Dinge schon seperat probiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ContextMenuStrip mnuCtx = new ContextMenuStrip(); ContextMenuStrip mnuCtx = new ContextMenuStrip(this.components); System.Windows.Forms.ContextMenuStrip mnuCtx = new System.Windows.Forms.ContextMenuStrip(); System.Windows.Forms.ContextMenuStrip mnuCtx = new System.Windows.Forms.ContextMenuStrip(this.components); MenuStrip mnuCtx = new System.Windows.Forms.MenuStrip(); MenuStrip mnuCtx = new System.Windows.Forms.MenuStrip(this.components); System.Windows.Forms.MenuStrip mnuCtx = new System.Windows.Forms.MenuStrip(); System.Windows.Forms.MenuStrip mnuCtx = new System.Windows.Forms.MenuStrip(this.components); |
Absolut nichts davon funktioniert und die Methode bricht grundlos ab. Das kann ja wohl nicht sein. Einige dieser Zeilen stehen 1:1 bei mir im Designer (abgesehen mal vom Variablentitel) und dort funktioniert es schließlich auch. TryCatch wird hier übrigens ignoriert - der Code bricht trotzdem einfach lautlos ab.
Wäre schön, wenn ihr mir nochmal ein paar Tipps geben könntet.
mfg
- VampireSilence
Christian S. - Fr 17.09.10 20:01
Was genau erwartest Du denn, was passiert? :-)
Du hast ja jetzt erst einmal nur eine Instanz der entsprechenden Klasse erstellt. Die weiß ja z.B noch nix davon, wo das Kontextmenü zu erscheinen hat.
VampireSilence - Sa 18.09.10 06:59
Ich erwarte in erster Linie mal, dass die Methode entweder abläuft oder mir nen Fehler wirft.
Mir ist klar, dass ich das Menü nach seiner Erstellung noch einblenden muss, aber bis dahin schafft es die Methode ja nichtmal. Und deswegen hat alles, was danach noch an Code kommt auch erstmal keine Relevanz.
mfg
- VampireSilence
Trashkid2000 - Sa 18.09.10 10:34
Nur das ContextMenuStrip zu erzeugen reicht nicht. Solange dort noch keine ToolStripMenuItems drin sind, wird das ContextMenuStrip auch nicht angezeigt. Wäre ja auch total sinnlos.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| ContextMenuStrip contextMenuStrip1 = new ContextMenuStrip(); ToolStripMenuItem toolStripItem1 = new ToolStripMenuItem() { Text = "Item1" }; ToolStripMenuItem toolStripItem2 = new ToolStripMenuItem() { Text = "Item2" };
toolStripItem1.Click += new EventHandler(toolStripItem1_Click); toolStripItem2.Click += new EventHandler(toolStripItem2_Click);
contextMenuStrip1.Items.Add(toolStripItem1); contextMenuStrip1.Items.Add(toolStripItem2);
this.ContextMenuStrip = contextMenuStrip1; |
So könnte das Ganze aussehen...
Marko
Christian S. - Sa 18.09.10 11:18
VampireSilence hat folgendes geschrieben : |
| Ich erwarte in erster Linie mal, dass die Methode entweder abläuft oder mir nen Fehler wirft. |
Wie äußert sich denn, dass sie nicht abläuft?
VampireSilence - So 19.09.10 16:10
Ok, also hier der komplette Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ToolStripItem[] mnuItem = new ToolStripItem[1]; mnuItem[0] = new System.Windows.Forms.ToolStripMenuItem("Foobar");
mnuCtx.Items.AddRange(mnuItem);
mnuCtx.Show(); |
Das wäre er. Alles läuft erstmal korrekt ab, aber bei Zeile 4 bricht die Methode dann ab. In dieser Zeile habe ich wie gesagt, jeweils eine der Zeile stehen gehabt, die ich im ersten Post schon benannt habe. Aber keine von denen funktioniert.
Ich will doch eigtl nur wissen, warum das so ist und warum die gleichen Zeilen im Designer nicht abbrechen.
mfg
- VampireSilence
Christian S. - So 19.09.10 16:19
Dieser Code geht bei mir und zeigt am oberen linken Bildschirmrand tatsächlich auch das Kontextmenü an.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| ToolStripItem[] mnuItem = new ToolStripItem[1]; mnuItem[0] = new System.Windows.Forms.ToolStripMenuItem("Foobar");
var mnuCtx = new ContextMenuStrip(); mnuCtx.Items.AddRange(mnuItem);
mnuCtx.Show(); |
Der Fehler muss also an anderer Stelle liegen.
Und es kommt keinerlei Fehlermeldung?
VampireSilence - So 19.09.10 17:12
Ok, das is echt deprimierend. Aber zumindest weiss ich schonmal, dass ich nicht bescheuert bin.
Nein, es wird wirklich überhaupt garnichts angezeigt. Selbst nen TryCatch mit abgefangener Exception wird einfach ignoriert. Also der Eintritt ins Try wird vom Code regulär vollzogen und an der betreffenden Zeile bricht er wieder einfach ab, ohne aber das Catch zu behandeln.
Ich habe mir auch schon überlegt, ob sich in den Projekteigenschaften nicht irgendwas einstellen lässt, was das öffnen von ContextMenüs verhindern könnte, oder ob es sonst irgendwelche umgebungsabhängigen Dinge gibt, die darauf Einfluss nehmen könnten, aber da fällt mir nichts ein und ansonsten habe ich auch überall noch die Standards aus der WindowsForms-Projektvorlage drin. Ich bin echt ratlos.
mfg
- VampireSilence
Christian S. - So 19.09.10 17:14
Kannst Du das Projekt evtl. mal anhängen?
VampireSilence - Mo 20.09.10 03:14
Ne, leider nicht weil da noch Sachen von der Firma drin sind.
Hab aber vorhin nochmal nen neues WinForms-Projekt erstellt und den Code in diesem Rohling anstandlos zum Laufen bekommen. Das kann wirklich nur bedeuten, dass irgendetwas mit meinem Projekt nicht stimmt. Aber das werde ich wohl oder übel dann alleine herausfinden müssen. Trotzdem Danke !
mfg
- VampireSilence
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!