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

Drag And Drop In The Treeview

بدأه server_programmer في 29 ديسمبر 2008 · 2 رد · 849 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

شباب عندي سؤال سريع

لو ممكن احد يخبرنا كيف يمكن ان يتم نقل عناصر من موقع لاخر في ضمن عنصر ال TreeView

للتوضيح

عندي شجرة تتكون من العنصر الرئيسي و أسمة العالم العربي

بداخل العنصر "العالم العربي" يوجد عنصرين و هم

- أسيا

-أفريقيا

بداخل العنصر "اسيا" توجد العناصر الفرعية التالية

- اليمن

- الكويت

- السعودية

- المغرب

اما العنصر الاخر "أفريقيا" فيوجد بداخلة العناصر التالية

- مصر

- السودان

- الجزائر

- Arab States
 |
 |-Asia
   |-Yemen
   |-Kuwait
   |- Saudi Arabia
   |- Moroco
 |
 |- Africa
   |-Egypt
   |-Sudan
   |- AlGira

من خلال الالية Drag and Drop

كيف يمكن نقل العنصر "المغرب" الموجود تحت العنصر "اسيا" ليكون تحت العنصر افريقيا؟

لو ممكن مثال للعملية و لكم تحياتي

Server_Programmer

تم تعديل هذه المشاركة بواسطة server_programmer في 29 ديسمبر 2008 في 12:31

وفوق كل ذي علم عليم

http://www.leaderstechnology.com

-------------------------------

#2

مرحباً أخي الكريم .

جرب المثال التالي :

 

[color= #000000; font-weight: bold;]Public [color= #000000; font-weight: bold;]Class Form1

    [color= #000000; font-weight: bold;]Private NodeToMove [color= #b1b100;]As TreeNode

    [color= #000000; font-weight: bold;]Private Drag [color= #b1b100;]As Boolean [color= #339933;]= [color= #000000; font-weight: bold;]False

 

    [color= #000000; font-weight: bold;]Private Sub TreeView1_MouseMove[color= #009900;](ByVal Sender [color= #b1b100;]As Object[color= #339933;], ByVal E [color= #b1b100;]As [color= #990000;]System[color= #339933;].Windows[color= #339933;].Forms[color= #339933;].Mou
seEventArgs[color= #009900;]) Handles TreeView1[color= #339933;].MouseMove

        [color= #b1b100;]If E[color= #339933;].Button [color= #339933;]= Windows[color= #339933;].Forms[color= #339933;].MouseButtons[color= #339933;].Left And Not Drag Then

            [color= #b1b100;]If Not TreeView1[color= #339933;].GetNodeAt[color= #009900;](E[color= #339933;].Location[color= #009900;]) Is Nothing Then

                NodeToMove [color= #339933;]= TreeView1[color= #339933;].GetNodeAt[color= #009900;](E[color= #339933;].Location[color= #009900;])

                Drag [color= #339933;]= [color= #000000; font-weight: bold;]True

            [color= #990000;]End [color= #b1b100;]If

        [color= #990000;]End [color= #b1b100;]If

    [color= #990000;]End Sub

 

    [color= #000000; font-weight: bold;]Private Sub TreeView1_MouseUp[color= #009900;](ByVal Sender [color= #b1b100;]As Object[color= #339933;], ByVal E [color= #b1b100;]As [color= #990000;]System[color= #339933;].Windows[color= #339933;].Forms[color= #339933;].Mouse
EventArgs[color= #009900;]) Handles TreeView1[color= #339933;].MouseUp

        [color= #b1b100;]If Drag Then

            [color= #b1b100;]If Not NodeToMove Is Nothing Then

                Dim Index [color= #b1b100;]As Integer [color= #339933;]= NodeToMove[color= #339933;].Index

                [color= #b1b100;]If TreeView1[color= #339933;].GetNodeAt[color= #009900;](E[color= #339933;].Location[color= #009900;]) Is Nothing Then

                    TreeView1[color= #339933;].Nodes[color= #339933;].Add[color= #009900;](NodeToMove[color= #339933;].Clone[color= #009900;])

                [color= #b1b100;]Else

                    Dim NNode [color= #b1b100;]As Object [color= #339933;]= TreeView1[color= #339933;].GetNodeAt[color= #009900;](E[color= #339933;].Location[color= #009900;])

                    [color= #b1b100;]If NNode[color= #339933;].Equals[color= #009900;](NodeToMove[color= #009900;]) Then Drag [color= #339933;]= [color= #000000; font-weight: bold;]False [color= #339933;]: [color= #990000;]Exit Sub

                    [color= #b1b100;]If NodeToMove[color= #339933;].FullPath[color= #339933;].CompareTo[color= #009900;](NNode[color= #339933;].FullPath[color= #009900;]) [color= #339933;]= [color= #cc66cc;]-1 Then Drag [color= #339933;]= [color= #000000; font-weight: bold;]False [color= #339933;]: E
xit Sub

                    TreeView1[color= #339933;].GetNodeAt[color= #009900;](E[color= #339933;].Location[color= #009900;])[color= #339933;].Nodes[color= #339933;].Add[color= #009900;](NodeToMove[color= #339933;].Clone[color= #009900;])

                [color= #990000;]End [color= #b1b100;]If

                NodeToMove[color= #339933;].Remove[color= #009900;]([color= #009900;])

            [color= #990000;]End [color= #b1b100;]If

            Drag [color= #339933;]= [color= #000000; font-weight: bold;]False

        [color= #990000;]End [color= #b1b100;]If

    [color= #990000;]End Sub

 

[color= #990000;]End [color= #000000; font-weight: bold;]Class

القيام بالأحداث :

عند تحريك الـ Mouse فوق الـ TreeView1 يتم التأكد إذا كان ( الزر اليساري مضغوط و الـ Drag قيمتها False ) إذا كان كذلك يتم تأكد من أن TreeView1.GetNodeAt وهي عملية تُرجع Node من موقع معين, في مثالنا هذا تُرجع من الإحداثيات ( X, Y ) للـ Mouse, إذا لم تكن Null أو Nothing ( لاشيء ) ستكمل العملية بتغير الـ NodeToMove إلى الـ Node الحالية . بعد ذلك يتم الإنتظار حتى إفلات الزر اليساري للـ Mouse وعند ذلك التأكد إذا كان Drag = True أي هنالك Node جديدة يجب أن يتم نقلها, وكما في الحدث ( TreeView1.MouseMove ) يتم تأكد أن هنالك Node في موقع الإحداثيات لـ X, Y ليتم إضافة الـ Node الحالية إليها , وحذف الـ Node القديمة من مكانها القديم .

ولتجنب بعض الأخطاء كـ ( إخفاء Node مع الـ Nodes التي تحويها ) استخدمنا String.CompareTo إذا أردت معرفة طريقة عمله راجع الموضوع الخاص بـ اشراقة الفجر عن دوال الـ String, أخر رد .

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#3

السلام عليكم,,,,

اخي مرفق مثال بسيط يمكن يفيدك,,,

TreeViewDragAndDrop.rar

[وسط]لا اله الا انت سبحانك انى كنت من الظالمين

[/وسط]

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