Event in DataGrid- bei Rechtsklickk Kontextmenu anzeigen
-
Hi,
ich möchte gerne einem DataGrid ein Event hinzufügen, dass bei einem Rechtsklick darauf ein Kontextmenu angezeigt wird. Wie mache ich das genau (bzw. wo finde ich zu dem Thema mehr Informationen), ach so...ich nutze dafür nicht den Designer, sondern will das von Hand coden.
Danke!
-
Wie Du ein ContextMenu selbst mit MenuItem belädst ist Dir bestimmt klar?
Hast Du eines erstellt, machst Du folgendes:
Das Grid hat eien Property ContextMenu
DeinGrid.ContextMenu = DeinContextmenu;
Den einzelnen MenuItem ist ein entsprechender Delegat zugewiesen
den Du über den Operator += dann einen entsprechenden Event-Callback zuweisen kannst! So wie das der Codedesigner bei den Buttons in InitializeComponents auch macht.Gruss sclearscreen
P.S.: Und um gezielt einzelne Zellen des Grid auf Klicks zu verifizieren hat das Grid die Möglichkeit über HitTestInfo dies zu tun.
-
saruman@work schrieb:
Hi,
ich möchte gerne einem DataGrid ein Event hinzufügen, dass bei einem Rechtsklick darauf ein Kontextmenu angezeigt wird. Wie mache ich das genau (bzw. wo finde ich zu dem Thema mehr Informationen), ach so...ich nutze dafür nicht den Designer, sondern will das von Hand coden.
Danke!
Da sieht man mal wieder das eine IDE mit Intellisens und Codevervollständigung goldwert ist. Wenn man dann nochnichtmal eine lokale MSDN als Hilfe hat ist man total aufgeschmissen. Aber zum Glück hat man einen Breitbandanschluss.
Und dann bewahrheitet sich auch wieder, man muss nicht alles wissen , man muss wissen wo es steht und wo man Information noch herbekommt.Internet, Foren und Suchmaschinen etc. sind schon genial!
Gruss sclearscreen
-
-
Ja, Danke fuer die Hilfe. Nur habe ich jetzt bei dem MenuItem.CLickEvent ein Problem...
ich habe das Kontextmenu befuellt:
void contMenu_Opening(object sender, CancelEventArgs e) { // throw new Exception("The method or operation is not implemented."); Control c = contMenu.SourceControl as Control; ToolStripDropDownItem tsi = contMenu.OwnerItem as ToolStripDropDownItem; contMenu.Items.Clear(); contMenu.Items.Add("Option 1"); contMenu.Items.Add("Option 2"); // Cancel to false e.Cancel = false; }
Es wird jetzt das Kontextmenu richtig angezeigt, mit den Auswahlmöglichkeiten Option1 und Option 2, nur wie kann ich Option1 oder Option2 jetzt ein Eventhandler hinzufügen?
Also sowas wie:
???.Click += new EventHandler(???_Click);
-
saruman@work schrieb:
/* Ich habe gleich mal verbessert meine Fehler gez. sclearscreen */ void contMenu_Opening(object sender, CancelEventArgs e) { // throw new Exception("The method or operation is not implemented."); Control c = contMenu.SourceControl as Control; ToolStripDropDownItem tsi = contMenu.OwnerItem as ToolStripDropDownItem; contMenu.Items.Clear(); contMenu.MenuItems.Add("Option 1"); contMenu.MenuItems.Add("Option 2"); // Cancel to false e.Cancel = false; /* So gehts */ foreach(MenuItem mnuItem in contMenu.MenuItems) { mnuItem.Click += new System.EventHandler(mnuItem_Click); } }
dann definierts Du noch sowas hier:
private void mnuItem_Click(object sender, System.EventArgs e) { switch((sender as MenuItem).Text) { case "Option 1": break; case "Option 2": break; default: break; } }
So sollte es seine Dienste tun!
Gruss sclearscreen
-
Wenn du jedem MenuItem ein eigenes Click-Event zuordnen willst, dann kannst du
auch direkt den Rückgabewert von Add benutzen:MenuItem item1 = contMenu.Items.Add("Option 1"); item1.Click += new System.EventHandler(menuItem_Option1); MenuItem item2 = contMenu.Items.Add("Option 2"); item2.Click += new System.EventHandler(menuItem_Option2);
Ich wundere mich nur gerade, daß in meiner MSDN "MenuItems" statt "Items" angegeben ist, aber ihr werded es ja ausprobiert haben...
-
sorry mein Fehler
@saruman mach bitte aus Items ---> MenuItems
Danke für den Hinweis @Th kann ja mal passieren.
Aber ich denke zumindest hätte man es dur das Intellisens und Codeersetzung
gemerkt und dannn aus Intuition gewusst was gemeint ist und es entsprechend angepasst!Mein Fehler, aber Fehler durch schwache Momente können bekanntlich auftreten.
Gruss sclearscreen
-
Das Problem arbeitet man viel mit anderen Collections denkt man automatisch an gesammelte Items kann man nichts machen. Wenn man dabei eine Birne auf dem Hals hat, die automatisch im Context der Sache schon Dinge vorausdenkt. Naja und das Menu ist auch nur eine Sammlung von Menüpunkten. Ich weiss auch nicht aber so gehts mir.
Dann habe ich mir bei dem VS.NET eine Arbeitsweise in der hinsicht angewöhnt:
1. Man schreibt die ersten paar markanten Buchstaben eines Instanzmember in
den Quellcode2. Dann drücke ich STRG SPACE und die intelligente Codersetzung versucht
richtig zu ersetzen3. Ich lese mir nochmals die vorgeschlagen Ersetzung durch ob es passt
4. Sollte die Quelltextersetzung nicht passen und es gibt mehrer Ersetzungen
suche ich selbst das passende raus. Dabei kann man auch nochmals schön
selbst im Angebote der Quelltextersetzung scrollen, und lernt noch nebenbei
darüber das Framework kennen.
*Jedenfalls bilde ich mir ein so effektiv mit den Vorteilen der intelligenten Codeersetzung zu arbeiten.
Gruss sclearscreen
-
Hi sclearscreen, ich wollte dich nicht verbessern, sondern ich hatte mich nur gewundert, daß der Code von Saruman kompiliert und funktioniert.
-
Th schrieb:
Hi sclearscreen, ich wollte dich nicht verbessern, sondern ich hatte mich nur gewundert, daß der Code von Saruman kompiliert und funktioniert.
Nee das habe ich auch nicht so verstanden! Aber es ist gut auf Ungereimtheit deutlich zu machen, solange man sachlich bleibt. Das weiss nur Saruman ob sein Code kompilliert, aber ich denke er wird es schon machen das der Code dann seinen Kram tut!
Gut aufgrund meines Fehlers ist der Code etwas tendenziell in Richtung Pseudocode gegeangen. Aber der Sinn und Bewandniss war trotzdem noch deutlich.
Und ich denke alle Beteiligten können was damit anfangen und die Idee wurde deutlicher.
Gruss sclearscreen