ContextMenuStrip in einer TreeView - Welche TreeNode wurde geklickt?

11/12/2007 - 00:12 von Michael Stum | Report spam
Hallo,

heute ist nicht mein Tag :)
Ich habe hier eine TreeView die dynamisch mit Nodes gefüllt wird.
Jetzt habe ich aber zwei Arten von TreeNodes in der TreeView.
Sind natürlich alles TreeNodes, aber die unterscheiden sich in Sachen
ImageIndex, SelectedImageIndex, Tag und ContextMenuStrip.

Der ContextMenuStrip ist mein Problem. Je nach Art der TreeNode gebe ich
einen anderen ContextMenuStrip:

// Dokument
TreeNode tn = new TreeNode(rdr.GetString(1));
tn.Tag = new DMDocument(rdr.GetGuid(0),
rdr.GetString(1), Folder);
tn.ImageIndex = 2;
tn.SelectedImageIndex = 3;
tn.ContextMenuStrip = documentContextMenu;

// Ordner
TreeNode tn = new TreeNode(rdr.GetString(1));
tn.Tag = new DMFolder(rdr.GetGuid(0), rdr.GetString(1),
rdr.GetGuid(2));
tn.ImageIndex = 0;
tn.SelectedImageIndex = 1;
tn.ContextMenuStrip = folderContextMenu;

mein Problem ist jetzt der EventHandler des Menus, genauer die frage,
welche TreeNode denn jett angeklickt wurde.
Meine Ereignisprozedur hat zwei unbrauchbare Parameter: sender und
EventArgs.
Der sender enthàlt leider das MenuItem, und nicht die TreeNode, und e
enthàlt gar nichts verwertbares.

Mein nàchster Versuch: folderContextMenu.SourceControl. Das ist
dummerweise das ganze TreeView :(

treeview.SelectedNode ist leider auch nicht korrekt - wenn ich eine Node
nur rechtsklicke wàhrend eine andere selektiert ist dann bekomme ich
damit die selektierte TreeNode, nicht die angeklickte.

Mache ich hier einen Designfehler weil ich 2 ContextMenus in einer
TreeView haben will? Bin ich einfach nur Blind? Oder versuche ich etwas,
das noch nie jemand vorher versucht hat?
 

Lesen sie die antworten

#1 Herfried K. Wagner [MVP]
11/12/2007 - 00:23 | Warnen spam
"Michael Stum" schrieb:
mein Problem ist jetzt der EventHandler des Menus, genauer die frage,
welche TreeNode denn jett angeklickt wurde.



Etwa das 'MouseUp'-Ereignis behandeln und dort mit
'<TreeView-Steuerelement>.GetNodeAt(e.X, e.Y)' den Knoten unter dem
Mauszeiger bestimmen. Den Verweis auf diesen Knoten kannst Du dann in z.B.
einer privaten Variablen speichern.

M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ähnliche fragen