تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
معلومة ::: TreeView
#1
كاتب الموضوع : BADRMEDIA


أداة العرض الشجري TreeView

تستخدم فى كثير من المهام ومهمة لأى مبمرج لابد يتعرف على مفهومها وأهميتها

تستخدم فى عرض الملفات ومحركات الأقراص
تستخدم فى النظم المالية والمحاسبية مثل عرض شجرة الحسابات وغيرها من الأمور


سنبدأ نتعرف الحين فى نقاط وسنتطرق لفوائد حولها

==============================


قم بادراج الأداة من صندوق الأدوات ToolBox على الفورم وضع زر أمر Button

هذه الأداة TreeView عبارة عن حياة كاملة لمجموعة من الكائنات تتكامل مع بعضها

وطالما TreeView هى عرض شجرى إذن لابد أن يكون للشجرة بداية وبداية الشجرة الجذر

وهذا مثل مستكشف الانترنت - الجذر له هو سطح المكتب ومنه يتفرع كل شئ

لكن فى الأداة TreeView ممكن أن يكون هناك أكثر من جذر وكل جذر تحته مجموعته - والمجموعة التى تتفرع منه تسمي أيناء - ولك أن تشبه ذلك بشجرة العائلة - جد منه أب من الأب حفيد وهكذا

وكل عنصر يسمى Node أى عقدة - أى تشبيه بالشجرة والعقد التى فيها التى تعبر عن عمرها

وعدد العقد هو عدد العناصر فى الشجرة TreeView



كيف نضيف جذر للأداة TreeView :

ضع هذا الكود فى حدث الزر Button :



كود :
' هنا سنعرف متغير ونجعله نسخة من الفئة TreeNode

' أى حضرنا متغير ليكون عقدة من عقد الأداة بصرف النظر عن موقعه العائلى هل هو أب أم ابن

Dim rootNode As New TreeNode

' هنا أعطينا للمتغير الذى هو العقدة بعد أن أنشأناه أعطيناه اسم ظاهر للمستخدم

rootNode.Text = "الجذر الرئيسى"

' هنا النقطة المهمة وهلا اننا أضفناه لأداة الشجرة مباشرة أى كجذر مرتبط بالأداة مباشرة

TreeView1.Nodes.Add(rootNode)
}}}}
تم الشكر بواسطة:
#2
بالطبع نحن أضفنا جذر ومنه يتفرع كل شئ

وقلنا أن أن الجذر أو الأب أو الابن أعى عنصر داخل أداة TreeView هو عقدة مثل أمر الشجرة بالضبط عمرها بعدد العقد وهذه الأداة عدد عناصر بعدد العقد

تعال لننظر كيف نضع تحت الجذر أب وهكذا



كود :
' هنا سنعرف متغير ونجعله نسخة من الفئة TreeNode
' وسيكون الجذر الرئيسى
Dim rootNode As New TreeNode

' وهذا سيكون أول ابن

Dim childNode1 As New TreeNode

' وهذا سيكون ثاني ابن

Dim childNode2 As New TreeNode

' وهذا سيكون أول حفيد

Dim grandChildNode1 As New TreeNode

' وهذا سيكون ثاني حفيد

Dim grandChildNode2 As New TreeNode

' وهذا سيكون ثالث حفيد

Dim grandChildNode3 As New TreeNode



لاحظ أننا عرفنا كل هذه المتغييرات بنوع TreeNode ولكن التمميز فى اسمها ومكان اضافتها





كود :
' اعطينا اسم للمتغير الذى أردناه أن يكون هو الجذر
rootNode.Text = "الجذر الرئيسى"

' ثم اعطينا اسم للأب الأول
childNode1.Text = "الأبن1"
' ثم اعطينا اسم للأب الثاني
childNode2.Text = "الأبن2"

' ثم اعطينا اسم للحفيد الأول
grandChildNode1.Text = "الحفيد1"
' ثم اعطينا اسم للحفيد الثاني
grandChildNode2.Text = "الحفيد2"
' ثم اعطينا اسم للحفيد الثالث
grandChildNode3.Text = "الحفيد3"


هنا سيكون الأمر الهام وهو الذى يحدد من الأب ومن الأين





كود :
' هنا أضفنا للابن الأول الحفيد الأول
childNode1.Nodes.Add(grandChildNode1)

' هنا أضفنا للابن الأول الحفيد الثاني

childNode1.Nodes.Add(grandChildNode2)

' هنا أضفنا للابن الثاني الحفيد الثالث
childNode2.Nodes.Add(grandChildNode3)


' هنا سنضيف للجذر هذه الأبناء
rootNode.Nodes.Add(childNode1)
rootNode.Nodes.Add(childNode2)

' هنا سنضيف الجذر للشجرة مباشرة بعد أن حددنا له عائلته الكريمة

TreeView1.Nodes.Add(rootNode)






}}}}
تم الشكر بواسطة:
#3
كل ما قمنا به بالكود فى الشرح السابق - يمكن فعله أثناء التصميم عن طريق الخاصية Nodes للأداة TreeView من نافذة الخصائص الخاصة بها

لكن هذا سيكون فى حالة لو كان المعروض أشياء ثابتة أو عرضنا بالكود سيكون فى الأمور الأكثر فاعلية

أعتقد حتى الان قصة الشجرة ومحور حياتها وعائلتها الكريمة أصبح أمر سهل ومفهوم



}}}}
تم الشكر بواسطة:
#4
هذا هو الكود فى المثال السابق

ضعه فى حدث Load للفورم



كود :
Dim rootNode As New TreeNode
Dim childNode1 As New TreeNode
Dim childNode2 As New TreeNode
Dim grandChildNode1 As New TreeNode
Dim grandChildNode2 As New TreeNode
Dim grandChildNode3 As New TreeNode
rootNode.Text = "الجذر الرئيسى"
childNode1.Text = "الأبن1"
childNode2.Text = "الأبن2"
grandChildNode1.Text = "الحفيد1"
grandChildNode2.Text = "الحفيد2"
grandChildNode3.Text = "الحفيد3"
childNode1.Nodes.Add(grandChildNode1)
childNode1.Nodes.Add(grandChildNode2)
childNode2.Nodes.Add(grandChildNode3)
rootNode.Nodes.Add(childNode1)
rootNode.Nodes.Add(childNode2)
TreeView1.Nodes.Add(rootNode)


كيف نقرأ عقدة ( جذر - أب - ابن - لقيط ) محددة


ضع زر على الفورم واكتب تحته هذا الكود :



كود :
If TreeView1.SelectedNode Is Nothing Then
Exit Sub
End If

Dim SelectedNode As New TreeNode

SelectedNode = TreeView1.SelectedNode

MessageBox.Show("[" & SelectedNode.Text & "]")

قمنا أولاً بمعرفة هل هناك محدد فى الأداة أم لا

If TreeView1.SelectedNode Is Nothing

فإذا لم يكن هناك عنصر محدد أوقفنا الاجراء

Exit Sub



أما لو كان هناك عنصر محدد - فسنحدد ننشأ متغير نسميه SelectedNode من نوع الفئة TreeNode


ثم نساويه بالعنصر المحدد


كود :
SelectedNode = TreeView1.SelectedNode

ثم قرأناه فى رسالة - أى قرأنا اسمه



كود :
MessageBox.Show("[" & SelectedNode.Text & "]")

}}}}
تم الشكر بواسطة:
#5
فى الشرح السابق كان يمكن أن نقرأ العنصر مباشرة دون أن نحمله فى متغير من نوعه

هكذا



كود :
MsgBox(TreeView1.SelectedNode.Text())

لذلك يمكن أن نحذفه مباشرة



كود :
TreeView1.SelectedNode.Remove()

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



كود :
If TreeView1.SelectedNode Is Nothing Then
Exit Sub
End If
ثم نحذفه لو كان محدد



كود :
TreeView1.SelectedNode.Remove()

}}}}
تم الشكر بواسطة:
#6
عند عرض الشجرة TreeView نجد أن العناصر التى بها تكون محضونة داخل الجذر ولا تظهر إلا لو ضغطنا على علامة الموجب التى بجانب كل عنصر حاضن لعناصر أخري


لو أحببت عرض كل العناصر - أى أنك تقوم بفرد العناصر كلها وأن تصبح ظاهرة كلها




كود :
TreeView1.ExpandAll()

سقوم باظهار كل محتوياتها من العناصر


==============================


أما لو أحببت اظهار العناصر التى تحت عنصر محدد يكون الكود هكذا




كود :
If TreeView1.SelectedNode Is Nothing Then
Exit Sub
End If

TreeView1.SelectedNode.Expand()

طبعاُ لابد من التحقق من التحديد للعنصر أولاً


لكن سنلاحظ أن الاظهار الذى تم - تم اظهار العناصر التى تحت العنصر مباشرة أما العناصر التى تحت العناصر التى تحت العنصر المحدد لم تظهر - لذلك لو أحببت اظهارها يكون الأمر هكذا


كود :
If TreeView1.SelectedNode Is Nothing Then
Exit Sub
End If

TreeView1.SelectedNode.ExpandAll()
}}}}
تم الشكر بواسطة:
#7
لقد تعلمنا التحكم فى عرض العناصر وكيف نظهر العناصر التى تحتها


لكن ماذا لو أحببت أن تدمج العناصر كلها للأداة - الأمر بسيط - كل ماعليك هو كتابة :



كود :
TreeView1.CollapseAll()

لكن لو أحببت أن تدمج عناصر متفرعة من عنصر محدد يكون الأمر هكذا :



كود :
TreeView1.SelectedNode.Collapse()

طبعاً لاتنسى أن تتحقق أولاً من تحديد العنصر كما بينا من قبل





إن شاء الله غداً نكمل - حان موعد النوم
}}}}
تم الشكر بواسطة:
#8
نري فى شجرة العرض TreeView أنه يكون بجانب العنصر أو العقدة - صورة تعبر عن العنصر

كيف يتم ذلك ؟



قوم بادراج أداة ImageList من صندوق الأداوات ToolBox - وهى أداة حاضنة لمجموعة من الصورة يتم الوصول لهم برقم الفهرس للصورة الذى رتبت به داخل الأداة الحاضنة

بعد أن تضعها على الفورم - قم بفتح الخاصية Images من نافذة الخصائص - وقم باضافة صور لها


بعد ذلك اذهب للأداة TreeView واختار الخاصية ImageList واختار منها الأداة ImageList1 التى وضعناها


أذهب للخاصية Nodes والتى تعاملنا معها من قبل فى اضافة العناصر ( العقد )

وأثناء تصميم العقدة اختار الخاصية ImageIndex وستجد أن الصور التى أرفقتها فى الأداة ImageList ظهرت مرتبة بفهرس - اختار ما تريده وستجد الصورة تظهر بجانب العنصر

}}}}
تم الشكر بواسطة:
#9
بالنسبة لما قمنا به فى الرد السابق - نستطيع أن نقوم به بالكود

فيمكن انشاء ImageList بالكود ووضع الصور فيه وترتب بالفهرس


كود :
Dim myImageList As New ImageList
myImageList.Images.Add(Image.FromFile("Default.gif"))
myImageList.Images.Add(Image.FromFile("Selected.gif"))

ثم نربط TreeView بأداة الصور


كود :
TreeView1.ImageList = myImageList

ثم نبدأ فى بناء العناصر ( العقد ) ونربط كل عقدة برقم فهرس صورة محددة


كود :
Dim rootNode As New TreeNode

rootNode.Text = "الجذر"
rootNode.ImageIndex = 0


rootNode.SelectedImageIndex = 1


Dim childNode1 As New TreeNode
Dim childNode2 As New TreeNode

childNode1.Text = "الابن1"
childNode1.ImageIndex = 0


childNode1.SelectedImageIndex = 1
childNode2.Text = "الابن2"
childNode2.ImageIndex = 0


childNode2.SelectedImageIndex = 1


rootNode.Nodes.Add(childNode1)
rootNode.Nodes.Add(childNode2)


TreeView1.Nodes.Add(rootNode)

وهذا الأمر شرحناه من قبل
}}}}
تم الشكر بواسطة:
#10
كيف نعرف عدد العقد الموجودة فى شجرة عرض TreeView أو عدد العناصر التى تحت عنصر معين


سيرافقنا هذا المثال الدائم :


كود :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim rootNode As New TreeNode
Dim childNode1 As New TreeNode
Dim childNode2 As New TreeNode
Dim grandChildNode1 As New TreeNode
Dim grandChildNode2 As New TreeNode
Dim grandChildNode3 As New TreeNode
rootNode.Text = "الجذر الرئيسى"
childNode1.Text = "الأبن1"
childNode2.Text = "الأبن2"
grandChildNode1.Text = "الحفيد1"
grandChildNode2.Text = "الحفيد2"
grandChildNode3.Text = "الحفيد3"
childNode1.Nodes.Add(grandChildNode1)
childNode1.Nodes.Add(grandChildNode2)
childNode2.Nodes.Add(grandChildNode3)
rootNode.Nodes.Add(childNode1)
rootNode.Nodes.Add(childNode2)
TreeView1.Nodes.Add(rootNode)

TreeView1.ExpandAll()

End Sub

ولكن هنا قمنا بفرد كل العناصر وجعلها ظاهرة بالأمر


كود :
TreeView1.ExpandAll()

لو أردنا أن نعرف كل العناصر الموجودة فى TreeView

سنقوم بهذا النتيجة كرسالة للمستخدم



كود :
MessageBox.Show(TreeView1.GetNodeCount(True))

أما لو أردنا عرض عدد العناصر التى تحت عنصر محدد - وذلك يفيد فى معرفة مثلاً عدد الحسابات التى تحت حساب محدد - قمنا بتحديده بالماوس



كود :
MessageBox.Show(TreeView1.SelectedNode.GetNodeCount(True))
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  معلومة ::: ListBox Blue Sky 14 2,437 14-11-16, 11:32 PM
آخر رد: فارس جراح
  معلومة مهمه فى المصفوفات ali.alfoly 2 797 30-08-13, 02:25 AM
آخر رد: ali.alfoly
  من المنتدى القديم - معلومة ::: ProgressBar ( للاخ BADRMEDIA ) المبرمج علي نوري 2 1,269 23-08-13, 11:17 PM
آخر رد: nin9e
  معلومة :: تعلم كيف تحفظ صورة في My.Settings بدون الإحتياج إلى مسارها! أسامة أحمد 3 1,022 16-12-12, 06:25 PM
آخر رد: 3amo
  من المنتدى القديم - معلومة ::: CheckBox ( للاخ BADRMEDIA ) المبرمج علي نوري 1 575 30-11-12, 05:54 PM
آخر رد: مبرمج أوتار
  معلومة :: الحل لمشكلة الخطأ في الكود For Each i As Button In Me.Controls Aly El-Haddad 2 680 10-11-12, 09:15 PM
آخر رد: Mr. DotNet
  معلومة : Partial Class RaggiTech 1 545 06-10-12, 11:03 PM
آخر رد: RaggiTech
  معلومة : TryCast مهمة RaggiTech 0 462 06-10-12, 11:02 PM
آخر رد: RaggiTech
  معلومة : XML Comments مهمة RaggiTech 1 423 06-10-12, 11:01 PM
آخر رد: RaggiTech
  معلومة - الاستثناءات ( Exceptions ) RaggiTech 0 534 06-10-12, 11:00 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم