سؤال

ما الذي سيؤدي إلى انهيار TreeView للانهيار، بخلاف استدعاء الأسلوب .collapse () على طريقة ترينود أو .collapseall () ل TreeView؟

في تطبيق أقوم بتطويره، لن يتصرف TreeView ببساطة بشكل صحيح. تحافظ TreeView على مستويين فقط. عند اختيار طفل من العقدة الأصل، تنهار جميع العقد الأخرى على الفور. ومع ذلك، لا توجد مكالمة أسلوب .collapse () أو .collapeall () في التعليمات البرمجية الخاصة بي على الإطلاق!

يتم ترك جميع خصائص TreeView في الإعدادات الافتراضية باستثناء خاصية .labelEdit، والتي تم ضبطها على True. يحتوي TreeView على بعض التعليمات البرمجية المرتبطة خلال حدث ما بعد البيع للحصول على روتين "التحقق من صحة / رسالة".

لقد حاولت:

  • ربط الحدث BeforeCollapse في TreeView ورفع العلم E.Cancelaction.

  • توسيع جميع العقد يدويا في حدث ما بعد حلقة الشير. (هذا يعمل بشكل جيد كتجربة، لكنني لا أنوي عدم السماح بانهيار العقدة
    كليا!)

في العديد من النقاط داخل التعليمات البرمجية، أنا تكرار من خلال TreeView، عقدة العقدة، للتحقق من الخصائص. ومع ذلك، لا تحدث إضافات أو حذف العقد. خصائص TreeNode الوحيدة التي يتم تعديلها حيث يقوم المستخدم بإجراء اختيارات .IMAGEIDEX و.

بخلاف الحلول أعلاه، ليس لدي أي فكرة عن ما قد يسبب هذا الخطأ. حتى لو لم يكن هناك حلول قد تتحقق، فربما يكون لدى أي شخص فكرة عن الطريقة الصحيحة للذهاب حول الانهيار؟ (لقد حاولت إعداد نقطة توقف ضمن حدث BeforeCollapse، لكنه لا يتم تشغيله إلا إذا كان المستخدم ينهار بشكل صريح العقدة عبر الماوس أو لوحة المفاتيح.)


تحديث:

المشكلة ترجع إلى تشجيع خاصية .SelectedimageIndex على أي tereenode. يؤدي تغيير هذه الخاصية إلى انهيار جميع العقد الأخرى.

لقد حاولت المحيطة بمكالمات تعديل خاصية تعديل خاصية .BEGINUPDATE () و .endupdate () دون جدوى.

كيف يمكن تجنب ذلك؟

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

المحلول

هذا تأثير جانبي للطريقة التي تعمل بها النوافذ الأصلية في Windows. يتم تحديد العديد من خيارات النافذة بواسطة إشارات نمط في مكالمة CreateWindowEx (). الاشياء الأساسية، مثل ما يبدو عليه الحدود في شكل. أي نوع من الرؤية يجب أن يكون لدى ListView. ما إذا كان يجب على TreeView عرض مربعات الاختيار.

تتعرض هذه الأساليب كخصائص على عنصر تحكم. ولكن هناك مشكلة. يتطلب تغيير هذا العقار أن يتم إعادة إنشاء النافذة من الصفر بحيث يمكن تحديد إشارات نمط جديدة في مكالمة CreateWindowEx (). هذا له آثار جانبية، يتم إعادة إنشاء النافذة بالكامل حتى تفقد جميع الولاية السابقة.

نماذج Windows تقوم بعمل جيد جدا في جعل هذه تبدو ناعمة، واستعادة الحالة السابقة بعد إعادة إنشاء النافذة. ولكن هناك تسرب هنا وهناك. وعدد قليل من الأخطاء الصريحة. تسرب واحد في TreeView هو الحالة الدقيقة التي تنهار العقد منها والتي ليست كذلك. تتبع هذا ليس عمليا.

تشخيص هذا عن طريق وضع خاصية التعامل مع TreeView في نافذة مراقبة. إذا رأيت أنه يتغير، فقد وجدت الملكية. قائمة أعلام الأنماط متاحة هنا، ربما يمكنك تعيين أسمائهم إلى الممتلكات المقابلة بهم.

ربما يكون من الواضح أنه لا يوجد حل كبير لهذه المشكلة، بخلاف تجنب تغيير هذه الممتلكات. مشكلة مثل هذا هو ما Begat WPF.

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