Frage

Ich bin mit dem Click-Ereignisse auf dem TreeView ein paar Sachen zu tun, wenn ein Knoten im TreeView geklickt wird. Ich tue dies, indem Sie den Knoten erhalten, die durch den Aufruf GetNodeAt klicken Sie ist () mit den Mauskoordinaten, wie folgt aus:

private void TreeView_Click(object sender, System.EventArgs e)
{
    MouseEventArgs mouseEventArgs = e as MouseEventArgs;

    if (mouseEventArgs == null)
        return;

    // Get the node that is being clicked.                  
    TreeNode node = this.GetNodeAt(mouseEventArgs.X, mouseEventArgs.Y);

    // Do other stuff...
}

Doch die GetNodeAt () Methode funktioniert nur, wenn der Klick auf dem Knoten Etikett ist, wenn die Knoten Bild geklickt wird dann GetNodeAt () gibt den Wert null. Das ist ein bisschen ärgerlich, da der Knoten tatsächlich gewählt wird, wenn das Bild geklickt wird, aber ich kann nicht herausfinden, was Knoten ist.

Hat jemand irgendwelche Vorschläge?

Aktualisiert: Ich habe ein paar Vorschläge bekommen SelectedNode stattdessen zu verwenden. Das kann ich nicht, da sie gesetzt ist, nachdem das Click-Ereignis ausgelöst wird. Dies ist eigentlich in einem Steuerelement, das TreeView erbt und was es tut, ist Feuer es eigenes Clicked Ereignis ist, aber mit den zugrunde liegenden Daten, dass der TreeNode anstelle dem TreeNode selbst darstellt.

Aktualisiert: Es stellte sich heraus, dass jemand die GetNodeAt () -Methode in unserem Code außer Kraft gesetzt hatte, die dieses Verhalten eingeführt, die ich war nicht klar. Die Frage ist also null und nichtig, und es gibt kein Problem mit dem GetNodeAt () -Methode. Warum jemand tun würde, bleibt dies ein Rätsel. :)

War es hilfreich?

Lösung

Haben Sie die Before oder Afterselect Events versucht? Sie können den ausgewählten Knoten direkt aus dem TreeViewCancelEventArgs zu bekommen, es dann in Ihrem Click-Ereignisse verwenden.

Edit: Weitere Gedanken. Das einzige Problem, das ich mit diesem sehen kann, ist, dass das Before Ereignis tatsächlich feuert nach dem Click und Mouseclick Event

Ein weiterer Edit:. Wenn Sie ein Ereignis benötigen, das ausgelöst wird, bevor klicken, können Sie NodeMouseClick verwenden - TreeNodeMouseClickEventArgs hat einen Knoten Eigenschaft

Andere Tipps

Warum nicht einfach TreeView.SelectedNode benutzen?

Versuchen:

TreeNode node = this.SelectedNode;

EDIT: Geschlagen auf den Stempel von Sean

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top