Treeview.selectednode ให้ค่าที่ไม่ถูกต้อง

ฉันมีมุมมองต้นไม้ที่มีลูกหลายคนและหลายคนมีบรรพบุรุษ ฉันยังมี DataGridview อยู่ข้างๆ Treeview ด้วย ตามโหนดที่เลือก treeview ฉันผูกข้อมูลใน Datagridview

ฉันใช้ treeView1.SelectedNode เพื่อรับค่าโหนด ปัญหาของฉันคือนิพจน์นี้ให้โหนดที่เลือกไว้ก่อนหน้านี้

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    node = e.node;
}

นี่ให้โหนดที่ถูกต้องแก่ฉัน (โหนดที่เลือก) แต่

node = treeview1.selectednode ให้โหนดที่ฉันเลือกไว้ก่อนหน้านี้ ฉันต้องการรับโหนดที่เลือกนอกเหตุการณ์การคลิก (_nodemouseclick)

ฉันจะได้รับมันได้อย่างไร. ฉันไม่ต้องการบันทึกโหนดในตัวแปรโกลบอลแล้วใช้มัน

หวังว่าฉันจะอธิบายคำถามของฉันได้ชัดเจน

ขอขอบคุณในความคาดหมาย


person Hardik    schedule 19.09.2012    source แหล่งที่มา
comment
ใช้เหตุการณ์ AfterSelect แทน   -  person Hans Passant    schedule 19.09.2012
comment
ไม่มีปัญหาในการบันทึกลงในตัวแปรโกลบอลหลังจากที่คุณได้โหนดที่ถูกต้อง ดูคำตอบของฉัน   -  person Sami    schedule 19.09.2012


คำตอบ (2)


    TreeNode yourGlobalTreeNode;
    void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        yourGlobalTreeNode = e.Node;
        otherFunction();
        anOtherFunction(e.Node);
    }
    void otherFunction()
    {
        MessageBox.Show(yourGlobalTreeNode.Text);
    }
    void anOtherFunction(TreeNode tn)
    {
        MessageBox.Show(tn.Text);
    }

ฟังก์ชั่นอื่น ๆ หมายความว่าคุณสามารถใช้ tree_node นี้ได้ทุกที่โดยใช้สองวิธีข้างต้น

person Sami    schedule 19.09.2012
comment
ไม่จำเป็นต้องเขียนแบบส่วนตัว แต่เป็นระดับการป้องกันเริ่มต้น - person Sami; 19.09.2012

เป็นเพราะเหตุการณ์ MouseClick เกิดขึ้นก่อนที่ SelectNode จะถูกเปลี่ยนแปลง ลองใช้เหตุการณ์ SelectedItemChanged แทน

    private void TreeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {

    }
person syned    schedule 19.09.2012