تخزين المزيد من البيانات المخصصة في عقدة الشجرة في دلفي

click fraud protection

TTreeView دلفي يعرض المكون قائمة هرمية بالعناصر - عقد الشجرة. يتم تقديم العقدة بواسطة نص العقدة وصورة اختيارية. كل عقدة في طريقة عرض الشجرة هي مثيل لفئة TTreeNode.

بينما يمكنك ملء عرض الشجرة بالعناصر في وقت التصميم ، باستخدام محرر عناصر TreeView، في معظم الحالات ، ستملأ عرض الشجرة في وقت التشغيل - اعتمادًا على موضوع التطبيق.

يكشف محرر عناصر TreeView أنه لا يوجد سوى عدد قليل من المعلومات التي يمكنك "إرفاقها" بعُقدة: نص وبعض فهارس الصور (للحالة العادية ، الموسعة ، المحددة والمختلفة).

في الجوهر ، من السهل برمجة مكون عرض الشجرة. هناك طريقتان لإضافة عقد جديدة إلى الشجرة وتعيين التسلسل الهرمي لها.

إليك كيفية إضافة 10 عقد إلى عرض الشجرة (المسمى "TreeView1"). لاحظ أن خاصية العناصر توفر الوصول إلى كافة العقد في الشجرة. يضيف AddChild عقدة جديدة إلى طريقة عرض الشجرة. المعلمة الأولى هي العقدة الأصلية (لبناء التسلسل الهرمي) والمعلمة الثانية هي نص العقدة.

يقوم AddChild بإرجاع TTreeNode المضافة حديثًا. في ما سبق نموذج التعليمات البرمجية، تتم إضافة جميع العقد العشر كعقد جذر (ليس لها عقدة أصل).

في أي حالات أكثر تعقيدًا ، قد ترغب في أن تحمل العقد الخاصة بك مزيدًا من المعلومات - يفضل أن يكون لديك بعض القيم الخاصة (الخصائص) الخاصة بالمشروع الذي تقوم بتطويره.

instagram viewer

لنفترض أنك تريد عرض بيانات عنصر أمر العميل من قاعدة البيانات الخاصة بك. يمكن لكل عميل الحصول على المزيد من الطلبات وكل طلب يتكون من المزيد من العناصر. هذه علاقة هرمية يمكن للمرء عرضها في عرض الشجرة:

في قاعدة البيانات الخاصة بك سيكون هناك المزيد من المعلومات لكل طلب ولكل عنصر. تعرض طريقة العرض الشجري الحالة الحالية (للقراءة فقط) - وتريد أن ترى تفاصيل لكل طلب (أو حتى لكل عنصر) للطلب المحدد.

عندما يختار المستخدم العقدة "Order_1_1" ، تريد عرض تفاصيل الطلب (إجمالي المبلغ والتاريخ وما إلى ذلك) للمستخدم.

يمكنك ، في ذلك الوقت ، إحضار البيانات المطلوبة من قاعدة البيانات ، ولكنك ستحتاج إلى معرفة المعرف الفريد (دعنا نقول قيمة صحيحة) للترتيب المحدد للحصول على البيانات الصحيحة.

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

عندما يحدث مثل هذا الموقف ، قد تميل إلى البحث عن خاصية Tag (العديد من مكونات دلفي) ولكن خاصية Tag لا يتم كشفها بواسطة فئة TTreeNode.

إضافة بيانات مخصصة إلى العقد الشجرة: The TreeNode. خاصية البيانات

تتيح لك خاصية البيانات لعقدة الشجرة ربط بياناتك المخصصة مع عقدة الشجرة. البيانات هي المؤشر ويمكن أن يشير إلى الأشياء والسجلات. تُظهر بيانات عرض XML (موجز ويب لـ RSS) في TreeView كيفية تخزين ملف نوع السجل متغير في خاصية البيانات لعقدة الشجرة.

تعرض العديد من فئات أنواع العناصر خاصية البيانات — يمكنك استخدامها لتخزين أي كائن مع العنصر. مثال على ذلك هو TListItem لمكون TListView. هنا كيفية إضافة كائنات إلى خاصية البيانات.

إضافة بيانات مخصصة إلى العقد الشجرة: The TreeView. CreateNodeClass

إذا كنت لا ترغب في استخدام خاصية البيانات الخاصة بـ TTreeNode ، ولكنك ترغب في تمديد TreeNode الخاص بك مع بعض الخصائص ، فإن Delphi لديها أيضًا حل.

لنفترض أنك تريد أن تكون قادرًا على القيام بذلك

إليك كيفية تمديد TTreeNode القياسي مع بعض الخصائص الخاصة بك:

  1. قم بإنشاء TMyTreeNode الخاص بك عن طريق توسيع TTreeNode.
  2. أضف إليه خاصية سلسلة MyProperty.
  3. معالجة OnCreateNodeClass لطريقة عرض الشجرة لتحديد فئة العقدة التي يجب إنشاؤها.
  4. فضح شيء مثل خاصية TreeView1_SelectedNode على مستوى النموذج. قد يكون هذا النوع TMyTreeNode.
  5. تعامل مع OnChange في طريقة عرض الشجرة للكتابة إلى SelectedNode قيمة العقدة المحددة.
  6. استخدم TreeView1_Selected.myProperty لقراءة أو كتابة قيمة مخصصة جديدة.

إليك شفرة المصدر الكاملة (TButton: "Button1" و TTreeView: "TreeView1" في نموذج):

هذه المرة لا يتم استخدام خاصية البيانات لفئة TTreeNode. بدلاً من ذلك ، يمكنك توسيع فئة TTreeNode للحصول على نسختك الخاصة من عقدة الشجرة: TMyTreeNode.

باستخدام حدث OnCreateNodeClass لطريقة العرض الشجري ، يمكنك إنشاء عقدة لفئتك المخصصة بدلاً من فئة TTreenode القياسية.

instagram story viewer