جستجو و Drag-Drop گره ها در کنترل TreeView

کنترل TreeView

در این مقاله نشان می دهیم که چگونه گره ها (node) را در TreeView، Drag-Drop کنیم و همچنین چگونه گره ها را جستجو نماییم ,.آموزش به زبان سی شارپ و VB.NET بوده که امیدوارم استفاده کنید

گام ۱: یک Windows Form Application ایجاد می کنیم. یک Button(btnSearch) و یک TextBox(txtSearch) به فرم اضافه می کنیم. حال یک کنترل TreeView (tvw) نیز به صفحه اضافه می کنیم.

در رویداد Form_Load() کد زیر را برای پر کردن TreeView می نویسیم:

کد C#:

private void Form1_Load(object sender, EventArgs e)

{

    treeView1.BeginUpdate();

    treeView1.Nodes.Add(".NET");

    treeView1.Nodes[0].Nodes.Add("Programming");

    treeView1.Nodes[0].Nodes[0].Nodes.Add("C#");

    treeView1.Nodes[0].Nodes[0].Nodes.Add("VB.NET");

    treeView1.Nodes.Add("Servers");

    treeView1.Nodes[1].Nodes.Add("Windows Server");

    treeView1.Nodes[1].Nodes[0].Nodes.Add("W2K3");

    treeView1.Nodes[1].Nodes[0].Nodes.Add("W2K8");

    treeView1.Nodes[1].Nodes.Add("SQL Server 2008");

    treeView1.Nodes[1].Nodes.Add("Exchange Server");

    // Expand all tree nodes when first loaded

    treeView1.ExpandAll();

    treeView1.EndUpdate();

    treeView1.AllowDrop = true;

}

 

کد VB.Net:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)

      treeView1.BeginUpdate()

      treeView1.Nodes.Add(".NET")

      treeView1.Nodes(0).Nodes.Add("Programming")

      treeView1.Nodes(0).Nodes(0).Nodes.Add("C#")

      treeView1.Nodes(0).Nodes(0).Nodes.Add("VB.NET")

      treeView1.Nodes.Add("Servers")

      treeView1.Nodes(1).Nodes.Add("Windows Server")

      treeView1.Nodes(1).Nodes(0).Nodes.Add("W2K3")

      treeView1.Nodes(1).Nodes(0).Nodes.Add("W2K8")

      treeView1.Nodes(1).Nodes.Add("SQL Server 2008")

      treeView1.Nodes(1).Nodes.Add("Exchange Server")

      ' Expand all tree nodes when first loaded

      treeView1.ExpandAll()

      treeView1.EndUpdate()

      treeView1.AllowDrop = True

End Sub

 

گام ۲: در ابتدا امکان جستجو در TreeView را پیاده سازی می کنیم. در رویداد کلیک دکمه btnSearch، کد زیر را اضافه می کنیم:

کد C#:

private void FindInTreeView(TreeNodeCollection tncoll, string strNode)

{

    foreach (TreeNode tnode in tncoll)

    {

        if (tnode.Text.ToLower() == strNode.ToLower())

        {

            tnode.ForeColor = Color.Blue;

            tnode.TreeView.SelectedNode = tnode;

        }

        else

        {

            tnode.BackColor = tnode.TreeView.BackColor;

        }

        FindInTreeView(tnode.Nodes, strNode);

    }

}

 

کد VB.Net:

Private Sub FindInTreeView(ByVal tncoll As TreeNodeCollection, ByVal strNode As String)

      For Each tnode As TreeNode In tncoll

            If tnode.Text.ToLower() = strNode.ToLower() Then

                  tnode.ForeColor = Color.Blue

                  tnode.TreeView.SelectedNode = tnode

            Else

                  tnode.BackColor = tnode.TreeView.BackColor

            End If

            FindInTreeView(tnode.Nodes, strNode)

      Next tnode

End Sub

 

کد بالا، گره ها را به صورت بازگشتی جستجو می کند. با استفاده از یک حلقه Foreach، هر یک از گره ها را گرفته و عنصر مورد جستجو را با متن گره treeview مقایسه می کنیم. اگر یکسان بود، گره را با یک رنگ متفاوت رنگی می کنیم.

[divider style=”normal” top=”20″ bottom=”20″]

پیشنهاد میکنم : نمایش رکورد ها با استفاده از TreeView در ASP.NET

[divider style=”normal” top=”20″ bottom=”20″]

 

گام ۳: حالا امکان drag-drop کردن گره ها در TreeView را اضافه می کنیم. ابتدا نیاز داریم که چند رویداد را register کنیم.

کد C#:

 private void RegisterEvents()

{

    this.tvw.DragDrop += new System.Windows.Forms.DragEventHandler(this.tvw_DragDrop);

    this.tvw.DragEnter += new System.Windows.Forms.DragEventHandler(this.tvw_DragEnter);

    this.tvw.ItemDrag += newSystem.Windows.Forms.ItemDragEventHandler(this.tvw_ItemDrag);

}

 

کد VB.Net:

Private Sub RegisterEvents()

      AddHandler tvw.DragDrop, AddressOf tvw_DragDrop

      AddHandler tvw.DragEnter, AddressOf tvw_DragEnter

      AddHandler tvw.ItemDrag, AddressOf tvw_ItemDrag

End Sub

 

نکته: RegisterEvents() را Form_Load() فراخوانی می کنیم.

قدم بعدی اضافه کردن کارایی هر یک از این event handler ها می باشد:

کد C#:

private void tvw_ItemDrag(object sender, ItemDragEventArgs e)

{

    tvw.DoDragDrop(e.Item, DragDropEffects.Move);

}



private void tvw_DragEnter(object sender, DragEventArgs e)

{

    e.Effect = DragDropEffects.Move;

}



private void tvw_DragDrop(object sender, DragEventArgs e)

{

    Point loc = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));

    TreeNode node = (TreeNode)e.Data.GetData(typeof(TreeNode));

    TreeNode destNode = ((TreeView)sender).GetNodeAt(loc);



    if (node.Parent == null)

        node.TreeView.Nodes.Remove(node);

    else

        node.Parent.Nodes.Remove(node);



    if (destNode.Parent == null)

        destNode.TreeView.Nodes.Insert(destNode.Index + 1, node);

    else

        destNode.Parent.Nodes.Insert(destNode.Index + 1, node);

}

 

کد VB.Net:

Private Sub tvw_ItemDrag(ByVal sender As Object, ByVal e As ItemDragEventArgs)

      tvw.DoDragDrop(e.Item, DragDropEffects.Move)

End Sub



Private Sub tvw_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs)

      e.Effect = DragDropEffects.Move

End Sub



Private Sub tvw_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs)

      Dim loc As Point = (CType(sender, TreeView)).PointToClient(New Point(e.X, e.Y))

      Dim node As TreeNode = CType(e.Data.GetData(GetType(TreeNode)), TreeNode)

      Dim destNode As TreeNode = (CType(sender, TreeView)).GetNodeAt(loc)



      If node.Parent Is Nothing Then

            node.TreeView.Nodes.Remove(node)

      Else

            node.Parent.Nodes.Remove(node)

      End If



      If destNode.Parent Is Nothing Then

            destNode.TreeView.Nodes.Insert(destNode.Index + 1, node)

      Else

            destNode.Parent.Nodes.Insert(destNode.Index + 1, node)

      End If

End Sub

 

همانطور که در کد بالا مشاهده می کنید، رویداد ItemDrag به محض اینکه کاربر شروع به drag کردن گره می کند، اجرا می شود. متد DoDragDrop پروسه drag-and-drop را شروع می کند.

رویداد DragEnter زمانی اتفاق می افتد که شیء TreeNode  از نقطه ای در TreeView به نقطه ای دیگر کشیده می شود. در این رویداد، می توان معتبر بودن عمل drag کردن را بررسی کرد.

و در نهایت، رویداد DragDrop زمانی اتفاق می افتد که شی ء TreeNode در نقطه مقصد در TreeView ، drop می شود. نقطه drop محاسبه شده و شی ء TreeNode بازیابی می شود، بنابراین به گره مقصد اضافه می شود. این تمام کدی بود که برای Drag Drop موردنیاز می باشد. فقط مطمئن باشید که ویژگی “AllowDrop” در TreeView روی True تنظیم شده باشد.

 

فاطمه زکایی

فاطمه زکایی هستم. فارغ التحصیل کارشناسی مهندسی نرم افزار، مدت سه سال هست که در زمینه توسعه اپلیکیشن های تحت وب و اندروید و همچنین تولید محتوای تخصصی برنامه نویسی تحت وب و اندروید در مجموعه mspsoft در خدمت شما هستم.

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

ما یک پرسشنامه‌ی کوچولو داریم، که قول میدیم وقتتون رو خیلی نمی‌گیره، ولی کلی به ما کمک می‌کنه، چون هم assessment مونه ,و هم شما به ما در این زمینه کمک میکنید.بزن بریم