Back to Devexpress

How to: Implement drag-and-drop of pages between different XtraTabbedMdiManagers

windowsforms-9229-controls-and-libraries-form-layout-managers-tabbed-mdi-manager-how-to-implement-drag-and-drop-of-pages-between-different-xtratabbedmdimanagers.md

latest6.0 KB
Original Source

How to: Implement drag-and-drop of pages between different XtraTabbedMdiManagers

  • Nov 13, 2018
  • 3 minutes to read

This example demonstrates how to use the XtraTabbedMDIManager.FloatMDIChildDragging event to implement drag-and-drop of MDI children between different XtraTabbedMDIManagers.

csharp
using System;
using System.Collections.Generic;
using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraTabbedMdi;

namespace DevExpress.Samples.DocumentSelector {
    public partial class MainForm : XtraForm {
        static int index = 0;
        public MainForm(StartForm owner) {
            index++;
            Owner = owner;
            InitializeComponent();
            Text += index.ToString();
            ((StartForm)Owner).Register(xtraTabbedMdiManager1);

            / ***Floating options*** /
            xtraTabbedMdiManager1.FloatOnDoubleClick = DevExpress.Utils.DefaultBoolean.True;
            xtraTabbedMdiManager1.FloatOnDrag = DevExpress.Utils.DefaultBoolean.True;
            xtraTabbedMdiManager1.FloatPageDragMode = FloatPageDragMode.Preview;
            / ***To Show form Icons in page headers*** /
            xtraTabbedMdiManager1.UseFormIconAsPageImage = DefaultBoolean.True;

            xtraTabbedMdiManager1.BeginFloating += xtraTabbedMdiManager1_BeginFloating;
            xtraTabbedMdiManager1.FloatMDIChildDragging += xtraTabbedMdiManager1_FloatMDIChildDragging;
        }
        protected override void OnClosed(EventArgs e) {
            ((StartForm)Owner).UnRegister(xtraTabbedMdiManager1);
            base.OnClosed(e); 
        }
        void xtraTabbedMdiManager1_FloatMDIChildDragging(object sender, FloatMDIChildDraggingEventArgs e) {
            /* 
             * To allow an XtraTabbedMdiManager to accept a dragged panel, 
             * the manager needs to be added to the e.Targets collection.
             */
            IEnumerable<XtraTabbedMdiManager> dropTargets = ((StartForm)Owner).GetManagers();
            foreach(XtraTabbedMdiManager manager in dropTargets) 
                e.Targets.Add(manager);
        }
        void xtraTabbedMdiManager1_BeginFloating(object sender, FloatingCancelEventArgs e) {
            e.Cancel = false; // Allow all tab pages to be dragged away from XTraTabbedMDIManager
        }
        void Form1_Load(object sender, EventArgs e) {
            if(index % 2 == 0) {
                AddChild("Recent", "Shows the recently viewed photos");
                AddChild("Favourites", "My favourite photos");
            }
            else {
                AddChild("Published", "These photos are published in my blog");
                AddChild("Unsorted", "Not reviewed photos");
            }
        }
        public void AddChild(string category, string tag) {
            ChildForm categoryForm = new ChildForm();
            categoryForm.Text = category;
            categoryForm.MdiParent = this;
            categoryForm.Tag = tag;
            categoryForm.Show();
        }
    }
}
vb
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports DevExpress.Utils
Imports DevExpress.XtraEditors
Imports DevExpress.XtraTabbedMdi

Namespace DevExpress.Samples.DocumentSelector
    Partial Public Class MainForm
        Inherits XtraForm
        Private Shared index As Integer = 0
        Public Sub New(ByVal owner As StartForm)
            index += 1
            Me.Owner = owner
            InitializeComponent()
            Text &= index.ToString()
            CType(Me.Owner, StartForm).Register(xtraTabbedMdiManager1)

            ' **Floating options**
            xtraTabbedMdiManager1.FloatOnDoubleClick = DevExpress.Utils.DefaultBoolean.True
            xtraTabbedMdiManager1.FloatOnDrag = DevExpress.Utils.DefaultBoolean.True
            xtraTabbedMdiManager1.FloatPageDragMode = FloatPageDragMode.Preview
            ' **To Show form Icons in page headers**
            xtraTabbedMdiManager1.UseFormIconAsPageImage = DefaultBoolean.True

            AddHandler xtraTabbedMdiManager1.BeginFloating, AddressOf xtraTabbedMdiManager1_BeginFloating
            AddHandler xtraTabbedMdiManager1.FloatMDIChildDragging, AddressOf xtraTabbedMdiManager1_FloatMDIChildDragging
        End Sub
        Protected Overrides Sub OnClosed(ByVal e As EventArgs)
            CType(Owner, StartForm).UnRegister(xtraTabbedMdiManager1)
            MyBase.OnClosed(e)
        End Sub
        Private Sub xtraTabbedMdiManager1_FloatMDIChildDragging(ByVal sender As Object, ByVal e As FloatMDIChildDraggingEventArgs)
'             
' * To allow an XtraTabbedMdiManager to accept a dragged panel, 
' * the manager needs to be added to the e.Targets collection.
'             
            Dim dropTargets As IEnumerable(Of XtraTabbedMdiManager) = (CType(Owner, StartForm)).GetManagers()
            For Each manager As XtraTabbedMdiManager In dropTargets
                e.Targets.Add(manager)
            Next manager
        End Sub
        Private Sub xtraTabbedMdiManager1_BeginFloating(ByVal sender As Object, ByVal e As FloatingCancelEventArgs)
            e.Cancel = False ' Allow all tab pages to be dragged away from XTraTabbedMDIManager
        End Sub
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
            If index Mod 2 = 0 Then
                AddChild("Recent", "Shows the recently viewed photos")
                AddChild("Favourites", "My favourite photos")
            Else
                AddChild("Published", "These photos are published in my blog")
                AddChild("Unsorted", "Not reviewed photos")
            End If
        End Sub
        Public Sub AddChild(ByVal category As String, ByVal tag As String)
            Dim categoryForm As New ChildForm()
            categoryForm.Text = category
            categoryForm.MdiParent = Me
            categoryForm.Tag = tag
            categoryForm.Show()
        End Sub
    End Class
End Namespace