New to Telerik UI for WinFormsStart a free 30-day trial

Drag-Drop from RadRibbonBar to RadTreeView.

Updated over 6 months ago

Environment

Product VersionProductAuthor
2022.2.510RadRibbonBar for WinFormsDinko Krastev

Solution

To add Drag-Drop between these two controls, we are going to use their drag-drop service: RadDragDropService and TreeViewDragDropService. We need to subscribe to their PreviewDragOver and PreviewDragDrop events and in their event handler we will convert the drag element. Important part here is that we need to allow the drag operation on both controls and their elements by using the AllowDrag property. The following code demonstrate this approach.

C#

public partial class RibbonTreeForm : Form
{
    private RadDragDropService ribbonDragDropService = new RadDragDropService();

    public RibbonTreeForm()
    {
        InitializeComponent();

        this.radTreeView1.AllowDragDrop = true;

        TreeViewDragDropService dragDropService = this.radTreeView1.TreeViewElement.DragDropService;
        dragDropService.PreviewDragOver += this.OnTreeViewDragDropServicePreviewDragOver;
        dragDropService.PreviewDragDrop += this.OnTreeViewDragDropServicePreviewDragDrop;

        this.radRibbonBar1.MouseDown += this.OnRadRibbonBarMouseDown;
        ribbonDragDropService.PreviewDragOver += this.OnRadRibbonDragDropServicePreviewDragOver;
        ribbonDragDropService.PreviewDragDrop += this.OnRadRibbonDragDropServicePreviewDragDrop;

        this.radRibbonBarGroup1.AllowDrop = true;
        this.radRibbonBarGroup2.AllowDrop = true;

        this.button1.AllowDrag = true;
        this.button2.AllowDrag = true;
        this.button3.AllowDrag = true;
        this.button4.AllowDrag = true;
    }

    private void OnRadRibbonDragDropServicePreviewDragOver(object sender, RadDragOverEventArgs e)
    {
        if (e.HitTarget is RadTreeViewElement || e.HitTarget is TreeNodeElement)
        {
            e.CanDrop = true;
        }
    }

    private void OnRadRibbonDragDropServicePreviewDragDrop(object sender, RadDropEventArgs e)
    {
        RadTreeViewElement treeViewElement = e.HitTarget as RadTreeViewElement;
        TreeNodeElement nodeElement = e.HitTarget as TreeNodeElement;

        RadButtonElement button = e.DragInstance as RadButtonElement;
        RadTreeNodeCollection nodes = null;

        if (treeViewElement != null)
        {
            nodes = treeViewElement.Nodes;
        }
        else if (nodeElement != null)
        {
            nodes = nodeElement.Data.Nodes;
            nodeElement.Data.Expand();
        }

        if (nodes != null)
        {
            nodes.Add(new RadTreeNode(button.Text));
            button.Parent.Children.Remove(button);
        }

    }

    private void OnRadRibbonBarMouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            RadButtonElement button = this.radRibbonBar1.ElementTree.GetElementAtPoint(e.Location) as RadButtonElement;

            if (button != null && button.FindAncestor<RadRibbonBarGroup>() != null)
            {
                ribbonDragDropService.Start(button);
            }
        }
    }

    private void OnTreeViewDragDropServicePreviewDragDrop(object sender, Telerik.WinControls.RadDropEventArgs e)
    {
        RadRibbonBarGroup ribbonBarGroup = e.HitTarget as RadRibbonBarGroup;

        if (ribbonBarGroup != null)
        {
            TreeNodeElement draggedNode = e.DragInstance as TreeNodeElement;
            RadButtonElement button = new RadButtonElement(draggedNode.Data.Text);
            button.AllowDrag = true;
            ribbonBarGroup.Items.Add(button);
            draggedNode.Data.Remove();
            e.Handled = true;
        }
    }

    private void OnTreeViewDragDropServicePreviewDragOver(object sender, Telerik.WinControls.RadDragOverEventArgs e)
    {
        RadRibbonBarGroup ribbonBarGroup = e.HitTarget as RadRibbonBarGroup;

        if (ribbonBarGroup != null)
        {
            e.CanDrop = true;
        }
    }
}
In this article
EnvironmentSolution
Not finding the help you need?
Contact Support