الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

بناء TreeView خطوة خطوة

مغلق
بدأه queen1 في 8 يناير 2005 · 4 رد · 739 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم :

كنت قد سئلت في هذا السؤال ، والأخوة في المنتدى أجابوا عليه عن طريق إعطائي برنامج جاهز .

لكنني مرة أخرى أكرر سؤالي أريد مثال بسيط مع شرحه خطوة خطوة .

أي يقوم بالشرح كلامياً مما يتكون TreeView ( ماهي الخصائص والطرق التي يستخدمها)

فأرجوا من لديه الإجابة أن يفيدني في أقرب وقت للحاجة .

وشكراً

#2

السلام عليكم ورحمة الله وبركاته

أود أن أساعدك على قدر الإمكان

ولكنى أفتقر لملكات الكتابة - معلهش

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

تعمدت فيه أن يكون هناك حقلين

حقل لمستوى البند فى الشجرة Levl وحقل به اسم الأب التابع له البند Parent

ولتحميل الشجرة هناك خطوتين

الأولى البحث عن المستوى الجذرى لها وتحميله - وقد فرضت أنه عند المستوى 1

والثانى هو الدخول فى تكرار للحصول على كل البنود المتفرعة من المستوى الحالى واعتبارها أبناء له - ثم العودة للأبناء والبحث عن أبنائهم حتى نهاية البيانات

وقد أضفت شرح بالانجليزى عند هذه الخطوات لتسهيلها قليلا

أرجو أن يكون واضح ويمكنك الاستفسار عن معاملات الأمر بضغط Ctrl + I أثناء الوقوف عليه لمعرفتهم - إذا كانت مبهمه عليك

Private Sub AddNodes()
   On Error GoTo ErrFound
   Me.MousePointer = vbHourglass
   Dim I As Long, L As Integer, L1 As Long, Le As Integer, SqlStr As String
   Dim Rs1 As Recordset, Rs2 As Recordset, Rs3 As Recordset
   '''''''******** How many Child Level We Have? ********
   SqlStr = "Select Max(Levl) From Acc_Code Where Levl Is Not Null;"
   Set Rs1 = Db.OpenRecordset(SqlStr, dbOpenDynaset)
    Rs1.MoveLast:        Rs1.MoveFirst
  Le = Rs1.Fields(0)
  With TV1  ''''****** TreeView Name *********
        .Nodes.Clear
     L1 = 1 ''''******* Parent Level =1 *********
        SqlStr = "Select * From Acc_Code Where Levl=" & L1 & " Order By Code;"
        Set Rs1 = Db.OpenRecordset(SqlStr, dbOpenDynaset)
        If Rs1.RecordCount > 0 Then
          Rs1.MoveLast: Rs1.MoveFirst
          For L = 0 To Rs1.RecordCount - 1
             ''''****** Fill The First Parent Level *************
             Set mNode = .Nodes.Add(, tvwNext, Rs1!E_Desc, Rs1!E_Desc, 2)
             Rs1.MoveNext
          Next L
        End If
        I = 0
   Do
    I = I + 1
       '''**** Select All Records Belong to this node to be its Children ******
       SqlStr = "Select * From Acc_Code Where Parent='" & .Nodes(I).Text & "' Order By Code;"
        Set Rs1 = Db.OpenRecordset(SqlStr, dbOpenDynaset)
        If Rs1.RecordCount > 0 Then
          Rs1.MoveLast: Rs1.MoveFirst
            For L = 0 To Rs1.RecordCount - 1
              ''''******** Add these Nodes to Be Children of this node
              Set mNode = .Nodes.Add(.Nodes(I).Text, tvwChild, Rs1!E_Desc, Rs1!E_Desc, Val("" & Rs1!Levl) + 1)
              Rs1.MoveNext
            Next L
        End If
   Loop Until I = .Nodes.Count
   End With
ErrFound:   '''**** Error Handler ********
  Me.MousePointer = vbDefault
  If Err.Number <> 0 Then
     MsgBox Err.Description & vbCrLf & TV1.Nodes.Item(I).Text, vbInformation, Err.Source & " (" & Err.Number & ")"
     Resume Next
  End If
End Sub

عن عبدالله بن عمر رضي الله عنهما أن رسول الله صلى الله عليه وسلم قال :

( أحب الناس إلى الله أنفعهم ، وأحب الأعمال إلى الله عز وجل سرور تدخله على مسلم ، أو تكشف عنه كربة ، أو تقضي عنه دينا ، أو تطرد عنه جوعا ، ولأن أمشي مع أخي المسلم في حاجة أحب إليّ من أن اعتكف في المسجد شهرا ، ومن كف غضبه ستر الله عورته ، ومن كظم غيظا ، ولو شاء أن يمضيه أمضاه ، ملأ الله قلبه رضا يوم القيامة ، ومن مشى مع أخيه المسلم في حاجته حتى يثبتها له ، أثبت الله تعالى قدمه يوم تزل الأقدام ، وإن سوء الخلق ليفسد العمل كما يفسد الخل العسل )

رواه الطبراني في الكبير

#3

اكتشفت أن هناك بعض الخطوات لا داعى لها فألغيتها

Private Sub AddNodes()
   On Error GoTo ErrFound
   Me.MousePointer = vbHourglass
   Dim I As Long, L As Integer, L1 As Long, SqlStr As String
   Dim Rs1 As Recordset
  With TV1  ''''****** TreeView Name *********
        .Nodes.Clear
     L1 = 1 ''''******* Parent Level =1 *********
        SqlStr = "Select * From Acc_Code Where Levl=" & L1 & " Order By Code;"
        Set Rs1 = Db.OpenRecordset(SqlStr, dbOpenDynaset)
        If Rs1.RecordCount > 0 Then
          Rs1.MoveLast: Rs1.MoveFirst
          For L = 0 To Rs1.RecordCount - 1
             ''''****** Fill The First Parent Level *************
             Set mNode = .Nodes.Add(, tvwNext, Rs1!E_Desc, Rs1!E_Desc, 2)
             Rs1.MoveNext
          Next L
        End If
        I = 0
   Do
    I = I + 1
       '''**** Select All Records Belong to this node to be its Children ******
       SqlStr = "Select * From Acc_Code Where Parent='" & .Nodes(I).Text & "' Order By Code;"
        Set Rs1 = Db.OpenRecordset(SqlStr, dbOpenDynaset)
        If Rs1.RecordCount > 0 Then
          Rs1.MoveLast: Rs1.MoveFirst
            For L = 0 To Rs1.RecordCount - 1
              ''''******** Add these Nodes to Be Children of this node
              Set mNode = .Nodes.Add(.Nodes(I).Text, tvwChild, Rs1!E_Desc, Rs1!E_Desc, Val("" & Rs1!Levl) + 1)
              Rs1.MoveNext
            Next L
        End If
   Loop Until I = .Nodes.Count
   End With
ErrFound:   '''**** Error Handler ********
  Me.MousePointer = vbDefault
  If Err.Number <> 0 Then
     MsgBox Err.Description, vbInformation, Err.Source & " (" & Err.Number & ")"
     Resume Next
  End If
End Sub

عن عبدالله بن عمر رضي الله عنهما أن رسول الله صلى الله عليه وسلم قال :

( أحب الناس إلى الله أنفعهم ، وأحب الأعمال إلى الله عز وجل سرور تدخله على مسلم ، أو تكشف عنه كربة ، أو تقضي عنه دينا ، أو تطرد عنه جوعا ، ولأن أمشي مع أخي المسلم في حاجة أحب إليّ من أن اعتكف في المسجد شهرا ، ومن كف غضبه ستر الله عورته ، ومن كظم غيظا ، ولو شاء أن يمضيه أمضاه ، ملأ الله قلبه رضا يوم القيامة ، ومن مشى مع أخيه المسلم في حاجته حتى يثبتها له ، أثبت الله تعالى قدمه يوم تزل الأقدام ، وإن سوء الخلق ليفسد العمل كما يفسد الخل العسل )

رواه الطبراني في الكبير

#4

السلام عليكم :

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

TreeView1.Nodes.Add , , "NodeKey", "NodeText"
TreeView1.Nodes.Add "NodeKey", tvwChild, "AnotherNodeKey", "anotherTExt"

يعني ماذا يقصدبكل من :

NodeKey ولماذا تركت العلامتين في البداية ( , , ) .

وماذا يقصد بـ tvwChild ولماذا وضعت الكلمة AnotherNodeKey

هذا ولكم مني جزيل الشكر

#5
اقتباس
يعني ماذا يقصدبكل من :

NodeKey ولماذا تركت العلامتين في البداية ( , , )

السطر الثانى أجاب على السؤال الأول، وأذكرك بأن تضغطى Crtl + I وأنت فى السطر لتعرفى المعاملات بالكامل

هنا سبب الفاصلتين لحجز خانتين لم نعطى لهما قيم لأن هذا البند Node بند جذرى فهو ليس تابع لبند آخر والفاصلة الثانية لتحدد أنه أبن أو تالى أو أو ... لست متذكر الباقى ولكن كل المتاح سيظهر بمجرد كتابة الفاصلة.

والبند فى السطر الثانى هو تابع للبند فى السطر الأول لذلك أشرنا مكان أول فاصلة أنه يتبع المفتاح الخاص بالبند الأول NodeKey وهو القيمة المعرفة لهذا البند الجذرى، وفى الفاصلة الثانية حددنا أنه ابنه tvwChild وفى الفاصلة الثالثة أعطيناه مفتاح خاص أسميناه AnotherNodeKey هذا الاسم لا يتكرر مع أى بند فهو قيمة فريدة خاصة لهذا بند ، كل بند له Key تذكرى هذا، ولكن يمكن أن يتكرر الاسم الظاهر بعد الفاصلة الرابعة فى المثال هنا اسمه anotherTExt

والفاصلة الرابعة أطلقنا عليه اسما يظهر للمستخدم anotherTExt وكان ممكن نضيف فاصلة أخرى للصورة التى نريدها أن تظهر وهى عبارة عن Index يأتى من ImageList سترينها إذا كنت مختاره نمط يعرض الصور

عن عبدالله بن عمر رضي الله عنهما أن رسول الله صلى الله عليه وسلم قال :

( أحب الناس إلى الله أنفعهم ، وأحب الأعمال إلى الله عز وجل سرور تدخله على مسلم ، أو تكشف عنه كربة ، أو تقضي عنه دينا ، أو تطرد عنه جوعا ، ولأن أمشي مع أخي المسلم في حاجة أحب إليّ من أن اعتكف في المسجد شهرا ، ومن كف غضبه ستر الله عورته ، ومن كظم غيظا ، ولو شاء أن يمضيه أمضاه ، ملأ الله قلبه رضا يوم القيامة ، ومن مشى مع أخيه المسلم في حاجته حتى يثبتها له ، أثبت الله تعالى قدمه يوم تزل الأقدام ، وإن سوء الخلق ليفسد العمل كما يفسد الخل العسل )

رواه الطبراني في الكبير

هذا الموضوع مغلق.

مواضيع مشابهة