How to prevent dragging of a particular panel in the form of WinForms Docking Manager?
Prevent dragging of a particular panel
To prevent dragging of a particular panel in the form the cancellable argument of the DragAllow event has to be set as True. Please refer the below code snippet which illustrates this:
C#
private void dockingManager1_DragAllow(object sender, Syncfusion.Windows.Forms.Tools.DragAllowEventArgs arg)
{
//If the control being dragged is Panel1, then cancel the drag.
if(arg.Control == this.panel1)
{
arg.Cancel = true;
MessageBox.Show("Access denied to drag the window");
}
//If a tab group containing the panel is dragged then, cancel the drag.
Syncfusion.Windows.Forms.Tools.DockHost dhost = arg.Control.Parent as Syncfusion.Windows.Forms.Tools.DockHost;
Syncfusion.Windows.Forms.Tools.DockHostController dhc = dhost.InternalController as Syncfusion.Windows.Forms.Tools.DockHostController;
if(dhc.ParentController is Syncfusion.Windows.Forms.Tools.DockTabController)
{
Syncfusion.Windows.Forms.Tools.DockTabControl docktab = (dhc.ParentController as
Syncfusion.Windows.Forms.Tools.DockTabController).TabControl;
foreach(DockTabPage tabpage in docktab.TabPages)
{
Control siblingcontrol = tabpage.dhcClient.HostControl.Controls[0];
if(siblingcontrol == this.panel1)
{
if(dhost.RectangleToScreen(dhost.TitleBar.CaptionRect).Contains(Cursor.Position) == true)
{
arg.Cancel = true;
}
}
}
}
}
VB
Private Sub dockingManager1_DragAllow(ByVal sender As Object, ByVal arg As Syncfusion.Windows.Forms.Tools.DragAllowEventArgs) Handles
dockingManager1.DragAllow
'If the control being dragged is Panel1, then cancel the drag.
If arg.Control Is Me.panel1 Then
arg.Cancel = True
MessageBox.Show("Access denied to drag the window")
End If
'If a tab group containing the panel is dragged then, cancel the drag.
Dim dhost As Syncfusion.Windows.Forms.Tools.DockHost = CType(IIf(TypeOf arg.Control.Parent Is Syncfusion.Windows.Forms.Tools.DockHost,
arg.Control.Parent, Nothing), Syncfusion.Windows.Forms.Tools.DockHost)
Dim dhc As Syncfusion.Windows.Forms.Tools.DockHostController = CType(IIf(TypeOf dhost.InternalController Is
Syncfusion.Windows.Forms.Tools.DockHostController, dhost.InternalController, Nothing), Syncfusion.Windows.Forms.Tools.DockHostController)
If TypeOf dhc.ParentController Is Syncfusion.Windows.Forms.Tools.DockTabController Then
Dim docktab As Syncfusion.Windows.Forms.Tools.DockTabControl = CType(IIf(TypeOf dhc.ParentController Is
Syncfusion.Windows.Forms.Tools.DockTabController, dhc.ParentController, Nothing),
Syncfusion.Windows.Forms.Tools.DockTabController).TabControl
For Each tabpage As DockTabPage In docktab.TabPages
Dim siblingcontrol As Control = tabpage.dhcClient.HostControl.Controls(0)
If siblingcontrol Is Me.panel1 Then
If dhost.RectangleToScreen(dhost.TitleBar.CaptionRect).Contains(Cursor.Position) = True Then
arg.Cancel = True
End If
End If
Next tabpage
End If
End Sub
Reference link: https://help.syncfusion.com/windowsforms/dockingmanager/docking-events#drag-events