حياة

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

إليك كيفية تمديد 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 القياسية.