ich grübel im Moment vor einem Problem.
Mein ContextmenüStrip ist so aufgebaut.
-Auswahl 1
-> Punkt 1
-> Punkt 2
-> Punkt 3
-Auswahl 2
-> Punkt 4
...
Wenn ich nun z.b. auf Punkt 2 klicke möchte ich herausfinden von dem dies ausging. In meinem Fall alles Label's.
Für die Aktion bei "Auswahl 1" ist dies kein Problem, die löse ich wie folgt:
(contextMenuStrip2.SourceControl as Label).Text
So doch wie mach ich das für z.b. den Punkt 1.
Wie oben scheint es nich zugeben.
Ich habe schon mal gegoogelt, dies soll wohl ein Bug beim Framework sein.
was steht denn dann im contextMenuStrip2.SourceControl drin (null)?
Wo hast du denn von diesem Bug gelesen? Und welche .NET-Version benutzt du (evtl. hilft ja ein Update)?
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Folglich ist contextMenuStrip2.SourceControl = null.
Puh find den Link nicht mehr, wo ich das gelesen hab.
Also Entwicklungsumgebung nutz ich VS 2009 prof mit .net 3.5.
Hab es aber auch unter VS 2010 mit .net 4.0 probiert, wo es nach meinem Muster nicht geht.
Fehler 1 "System.Windows.Forms.ContextMenuStrip" enthält keine Definition für "Owner", und es konnte keine Erweiterungsmethode "Owner" gefunden werden, die ein erstes Argument vom Typ "System.Windows.Forms.ContextMenuStrip" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)
Ich versteh einfach nich, dass es keine leichte Lösung dafür gibt.
hat mich eh gewundert, dass du sender auf ContextmenuStrip castest. Hätte erwartet, dass der sender ein ToolStripMenuItem ist.
Ja, und wenn der Fehler sagt "ContextmenuStrip" hat keine Owner-Property, dann stimmt das wohl
Und unter Workarounds steht auch die Alternative: merke dir im Opening- bzw. Opened-Event das SourceControl in einer Membervariablen (denn dort ist es richtig gesetzt) und benutze diese dann in dem Click-Event der Submenus.
Über den Degsiner würde ich es ungern machen, weil ich ca. 20 ToolStrip's habe.
Ich würde gern die Click-Ereignisse alle auf einen legen und dann wie normal mit dem Sender arbeiten.
Dies ist ja nun normal über den "sender" möglich, doch wenn man diesen im Debugger betrachtet ist dieser Leer. ... Hat jemand von euch eine Idee wie man dies löst?
die Antwort hat doch Th69 etwas weiter oben schon gegeben.
nee, das bezog sich auf die Owner-Property, die falsch zurückgegeben wird. Jetzt behauptet Theki, das sender-Argument im Click-Handler bleibe auch leer, was m.E. aber nicht stimmt, jedenfals kannichsnicht reproduzieren.
du solltest vlt. den sender nicht auf toolstrip casten, sondern auf...
edit: oder anners: Der Debugger zeigt dir auch den correkten Datentypen von Sender an.
Das mit base->base... ist nicht eine Struktur von Objekten, sondern das bildet die Vererbung ab.
also der sender-typ erbt von einem andern, der wiederum von einem anderen erbt, der die Tag-Property bereitstellt.
also sender ist ein toolstripmenuItem (kann darauf gecastet werden). toolstripmenuItem erbt von ToolStripDropDownItem, somit ist sender also ein erweitertes ToolStripDropDownItem (nämlich ein toolstripmenuItem. )
ToolStripDropDownItem erbt von ToolStripItem (also ist sender ein erweitertes ToolStripItem ), und ToolStripItem hat die Tag-Property.
Du kannst sender also auf ToolStripItem , ToolstripDropDownItem oder auf ToolstripMenuItem casten - jedes ist eine Erweiterung der vorherigen, beinhaltet alle vorherigen Eigenschaften, inkl. die Tag-Prop.
Das sind aber basics von OOP, und du solltest dir wohl ein Buch dazu durcharbeiten.
mein bisheriges Lieblingsbuch ist VB2005 DasEntwicklerbuch, weil das sowohl ausführlich auf Vererbung eingeht, als auch auf die VS-IDE.
Kennte ich ein vergleichbares c#-buch, tätich das natürlich empfehlen
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ErfinderDesRades am .