TreeView Problem
-
Hallo Leute,
ich hänge an einem Problem mit einer TreeView, an welchem ich nicht weiterkomme.
In der TreeView füge ich Elemente in 3 Ebenen ein.z.B.:
|-> Ebene 1 Element |-> Ebene 2 Element |-> Ebene 3 Element |-> Ebene 3 Element |-> Ebene 2 Element |-> Ebene 2 Element |-> Ebene1 Element |-> Ebene 2 Element |-> Ebene 3 Element |-> Ebene 3 Element |-> Ebene 2 Element
usw.
Abhängig von der Ebene zeige ich bei einem Rechtsklick ein anderes Kontextmenü an.
Nun das Problem: Ich kann einen Rechtsklick auf Ebene1 machen und dann die Maus ganz schnell bewegen um auf Ebene 3 zu kommen.
=> Daraufhin wird das Kontextmenü von Ebene 3 angezeigt (obwohl Ebene 1 rechtsgeklickt wurde).
Unter treeView1.SelectedNode bekomme ich als Rückgabe aber das Element aus Ebene1 (dieses wurde ja auch angeklickt)Aber wie bekomme ich nun das Element aus Ebene3? Dieses Element wurde nicht angeklickt und ist daher nicht Selected! Dennoch wurde das Kontextmenü darauf aufgerufen (es ist außerdem markiert).
Ich habe keine Möglichkeit gefunden zu bestimmen welches Element in Ebene 3 markiert ist (selected ist es nicht). Kann mir da jemand helfen?
Wäre echt super!!
Vielen Dank
GaDgeT
-
achja.. ich glaube dieses Problem tritt nur auf, wenn das Steuerelement bisher keinen Focus hatte!
D.h. nur beim ersten Klick in das Element kann ich die Maus so verschieben dass das Kontextmenü einer anderen Ebene geöffnet wird. Später geht das anscheinend nicht mehr.
Aber somit ist es reproduzierbar!
-
Soweit ich sehe ist doch das Problem das TreeView.SelectedNode nicht den aktuellen gewünschten Wert zurückgiebt.
Wie zeigst du das ContextMenu an, über Rechtsklick oder über die ContextMenu(Strip)-Eigenschaft?
- Das kann nämlich ein Ereignis auslösen, wenn es geöffnet werden soll (ContextMenuStripOpening) und deine Einstellungen vornehmen.
Oder überschriebst du die OnMouse...()-Methode?
- Versuche eine andere Methode zu überschreiben, oder stelle das
base.OnMouse...(e)
ganz an dem Anfang. - Oder füge ein
TreeNode node = this.GetNodeAt(e.Location); if(node != null) node.Select()
-
Hallo!
Erstmal Danke für Deine Antwort:
Anzeigen lasse ich es wie folgt:
TreeNode node = new TreeNode(); node.ContextMenuStrip = contextMenuStrip1;
Habe eben auch ein OnOpening-Event hinzugefügt.
Aber auch hier kann ich nicht bestimmen, auf welches Element gerade gezeigt wird.. oder habe ich etwas übersehen?Das sind die Parameter:
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) { //sender ist der ContextMenuStrip selbst }
Vielen Dank für weiter Hilfe..
Gruß