سؤال

أنا باستخدام الحدث انقر على TreeView أن تفعل بعض الأشياء عند عقدة النقر في TreeView.لقد فعل هذا عن طريق الحصول على العقدة انقر على طريق الدعوة GetNodeAt() مع إحداثيات الماوس, مثل هذا:

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...
}

ومع ذلك ، فإن GetNodeAt() الأسلوب يعمل فقط عند النقر على عقدة التسمية عند عقدة صورة ثم النقر GetNodeAt() بإرجاع قيمة خالية.هذا هو مزعج قليلا لأن العقدة هي في الواقع المحدد عند النقر على الصورة ولكن لا أستطيع معرفة ما عقدة هو.

هل من أحد لديه أي اقتراحات ؟

تحديث:لقد حصلت على بعض الاقتراحات لاستخدام SelectedNode بدلا من ذلك.لا أستطيع لأنه يقع بعد الحدث انقر فوق النار.هذا في الواقع في السيطرة يرث TreeView و ما يفعله هو النار هو نفسه النقر الحدث ولكن مع البيانات الأساسية التي TreeNode يمثل بدلا من TreeNode نفسها.

تحديث:تبين أن أحدهم قد تجاوز GetNodeAt (طريقة) في التعليمات البرمجية التي أدخلت هذا السلوك الذي لم يدرك.لذا فإن السؤال هو لاغ وباطل وليس هناك أي مشكلة مع GetNodeAt الأسلوب ().لماذا شخص ما من شأنه أن تفعل هذا لا يزال لغزا.:)

هل كانت مفيدة؟

المحلول

هل جربت BeforeSelect أو AfterSelect الأحداث ؟ يمكنك الحصول على العقدة المحددة مباشرة من TreeViewCancelEventArgs ، ثم استخدامها في الخاص بك انقر فوق الحدث.

تحرير:إضافية الفكر:المشكلة الوحيدة التي أستطيع أن أرى مع ذلك أن BeforeSelect الحدث في الواقع الحرائق بعد انقر فوق و MouseClick الأحداث.

آخر تحرير:إذا كنت بحاجة إلى الحدث الذي وقع قبل انقر فوق ، يمكنك استخدام NodeMouseClick - TreeNodeMouseClickEventArgs لديه عقدة الملكية.

نصائح أخرى

لماذا لا تستخدم فقط TreeView.SelectedNode؟

وجرب:

TreeNode node = this.SelectedNode;

وتحرير: ضرب لكمة من قبل شون

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top