Category / Section
How to programmatically dock the XPMenus bar in WinForms CommandBar?
1 min read
Dock the XPMenus bar
The XPMenus bar cannot be docked directly since it is not of the type control. So first, get the CommandBar that hosts this bar using the MainFrameBarManager’s GetBarControl method and then dock this CommandBar like any other dockable control. Please refer the below code snippet which illustrates this:
C#
CommandBar cmdbar = this.mainFrameBarManager1.GetBarControl(this.bar1); cmdbar.DockState = CommandBarDockState.Left; this.RecalcBarLayout(cmdbar); Private void RecalcBarLayout(CommandBar cmdbar) { // Call method RedockIfNeeded MethodInfo mInfo = typeof(CommandBar).GetMethod("RedockIfNeeded", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.NonPublic); if (mInfo != null) { mInfo.Invoke(cmdbar, new object[] { }); } // Call method OnCommandBarStateChanged mInfo = typeof(CommandBar).GetMethod("OnCommandBarStateChanged", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.NonPublic); if (mInfo != null) { mInfo.Invoke(cmdbar, new object[] { EventArgs.Empty }); } }
VB
Dim cmdbar As CommandBar = MainFrameBarManager1.GetBarControl(Bar1) cmdbar.DockState = CommandBarDockState.Left Me.RecalcBarLayout(cmdbar) Private Sub RecalcBarLayout(ByVal cmdbar As CommandBar) ' Call method RedockIfNeeded Dim mInfo As MethodInfo = GetType(CommandBar).GetMethod("RedockIfNeeded", BindingFlags.Instance Or BindingFlags.InvokeMethod Or BindingFlags.NonPublic) If Not mInfo Is Nothing Then mInfo.Invoke(cmdbar, New Object() {}) End If ' Call method OnCommandBarStateChanged mInfo = GetType(CommandBar).GetMethod("OnCommandBarStateChanged", BindingFlags.Instance Or BindingFlags.InvokeMethod Or BindingFlags.NonPublic) If Not mInfo Is Nothing Then mInfo.Invoke(cmdbar, New Object() {EventArgs.Empty}) End If End Sub