停靠面板是一个控件,它可以被停靠到窗体 (或用户控件) 或其他停靠面板。 本主题描述如何通过代码创建和销毁停靠面板。 请参阅 停靠面板 主题来获得关于停靠面板的基础信息。
本文档包含下列小节:
创建停靠面板
要创建停靠应用程序,则需要创建停靠管理器和停靠面板。 停靠管理器 组件提供了对停靠面板行为的集中控制。 每个停靠面板都必须属于一个特定的停靠管理器。
当停靠管理器被创建时,它的 DockManager.Form 属性必须被初始化 (通过停靠管理器的构造函数或直接初始化)。 该属性必须指向将显示停靠管理器拥有的停靠面板的窗体 (或用户控件)。 如果该属性值设置为 null,则不创建停靠面板。 在设计时刻,当停靠管理器被放置在窗体上时,该属性被自动初始化。
要创建停靠面板,可以使用下列方法:
DockManager.AddPanel | 创建一个面板并且把它停靠到窗体上,或使它浮动。 |
DockPanel.AddPanel | 创建一个面板并且把它停靠到其他面板上。 |
创建面板并且把它停靠到窗体上
使用 DockManager.AddPanel 方法来创建一个面板并把它停靠到窗体中,或使用它浮动。 DockManager.AddPanel 方法获得一个 dock(DockingStyle 类型) 参数,该参数指定所创建的面板停靠到窗体的哪一个边缘。
停靠样式 | 说明 |
---|---|
DockingStyle.Float | 面板浮动。 |
DockingStyle.Fill |
DockManager.AddPanel 方法不创建面板。 返回 null。
使用 DockingStyle.Fill 样式不能创建停靠面板并把它停靠到窗体中,就是说停靠面板不能占用整个窗体。 它只可以被停靠到窗体的边缘或浮动。 要使用 Fill 停靠样式创建一个控件——该控件将在窗体中间显示其他可视化控件, 例如,可以使用 Panel 或 XtraTabControl 控件。 |
DockingStyle.Left、DockingStyle.Right、DockingStyle.Top、DockingStyle.Bottom | 停靠面板被停靠到相应的窗体 (用户控件) 边缘。 |
示例 1
C# | 复制代码 |
---|---|
using DevExpress.XtraBars.Docking; // ... // Create a dock manager and initialize its Form property. DockManager dockManager1 = new DockManager(this); // Create and dock a panel to the top edge. DockPanel panel1 = dockManager1.AddPanel(DockingStyle.Top); panel1.Text = "Panel 1"; |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraBars.Docking ' ... ' Create a dock manager and initialize its Form property. Dim dockManager1 As DockManager = New DockManager(Me) ' Create and dock a panel to the top edge. Dim panel1 As DockPanel = dockManager1.AddPanel(DockingStyle.Top) panel1.Text = "Panel 1" |
结果显示如下:
创建面板并把它停靠到其他面板中
DockPanel.AddPanel 方法的行为由当前面板的类型确定:
- 对于常规(非容器)面板,如果调用 DockPanel.AddPanel 方法,则此方法将创建一个新的包含了当前面板和新建面板的分隔式容器。
- 对于分隔式容器或标签式容器,如果调用 DockPanel.AddPanel 方法,则此方法将把一个新的子面板追加到该容器中,该容器将包含新建的面板。
示例 2
下列代码演示了如何通过把一个面板停靠到其他面板来创建分隔式容器,然后把这个分隔式容器转换为标签式容器。
C# | 复制代码 |
---|---|
using DevExpress.XtraBars.Docking; // ... // Create a panel and dock it to the form's right edge. DockPanel panel1 = dockManager1.AddPanel(DockingStyle.Right); panel1.Text = "Panel 1"; // Add a new panel to panel1. This forms a split container that owns panel1 and panel2. DockPanel panel2 = panel1.AddPanel(); panel2.Text = "Panel 2"; // Transform the split container into a tab container. DockPanel container = panel1.ParentPanel; container.Tabbed = true; |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraBars.Docking ' ... ' Create a panel and dock it to the form's right edge. Dim panel1 As DockPanel = dockManager1.AddPanel(DockingStyle.Right) panel1.Text = "Panel 1" ' Add a new panel to panel1. This forms a split container that owns panel1 and panel2. Dim panel2 As DockPanel = panel1.AddPanel() panel2.Text = "Panel 2" ' Transform the split container into a tab container. Dim container As DockPanel = panel1.ParentPanel container.Tabbed = True |
在上述代码中,所创建的容器是通过 panel1 的 DockPanel.ParentPanel 属性进行访问的。 panel2.ParentPanel 将给出相同的结果,因为 panel1 和 panel2 都属于相同的容器。
代码的执行结果显示在下面:
注意,当容器仅包含一个面板时,容器会被自动销毁,例如一个容器只包含了两个面板并且其中一个面板被取消停靠。 在这种情况下,当容器被销毁之后,容器的子面板的 DockPanel.ParentPanel 属性将立即返回 null。
把可视化控件添加到停靠面板中
每个停靠面板都有一个标题和客户区,在客户区内可以放置可视化控件。 如果停靠面板作为分隔式容器或标签式容器,则客户区显示该容器的子面板。
如果某个停靠面板既不是分隔式容器,也不是标签式容器,则该面板的客户区可以显示多种可视化控件 (按钮、编辑器、树状视图等)。 在这种情况下,停靠面板的客户区通过一个 ControlContainer 类型的控件表示,并且可以通过 DockPanel.ControlContainer 属性访问该控件。 使用该属性的 Controls 集合来维护 (添加、删除或访问) 显示在该面板内的可视化控件。示例 3
在下面的示例中,创建了一个分隔式容器,它由两个停靠面板构成。 一个 PropertyGrid 控件被放置在第一个面板中,一个 ListBox 控件被放置在第二个面板中。
C# | 复制代码 |
---|---|
// Create dock panels, panel1 and panel2 form a split container. DockPanel panel1 = dockManager1.AddPanel(DockingStyle.Top); panel1.Text = "Panel 1"; DockPanel panel2 = panel1.AddPanel(); panel2.Text = "Panel 2"; // Place a PropertyGrid control on panel1. PropertyGrid pGrid = new PropertyGrid(); pGrid.SelectedObject = panel1; pGrid.Dock = DockStyle.Fill; panel1.ControlContainer.Controls.Add(pGrid); // Place a ListBox control on panel2. ListBox lBox = new ListBox(); lBox.Items.AddRange(new string [] {"Item 1", "Item 2", "Item 3"}); lBox.Dock = DockStyle.Fill; panel2.ControlContainer.Controls.Add(lBox); |
Visual Basic | 复制代码 |
---|---|
' Create dock panels, panel1 and panel2 form a split container. Dim panel1 As DockPanel = dockManager1.AddPanel(DockingStyle.Top) panel1.Text = "Panel 1" Dim panel2 As DockPanel = panel1.AddPanel() panel2.Text = "Panel 2" ' Place a PropertyGrid control on panel1. Dim pGrid As PropertyGrid = New PropertyGrid pGrid.SelectedObject = panel1 pGrid.Dock = DockStyle.Fill panel1.ControlContainer.Controls.Add(pGrid) ' Place a ListBox control on panel2. Dim lBox As ListBox = New ListBox lBox.Items.AddRange(New String() {"Item 1", "Item 2", "Item 3"}) lBox.Dock = DockStyle.Fill panel2.ControlContainer.Controls.Add(lBox) |
考虑性能因素,因此不要把可视化控件添加到停靠面板的 Controls 集合中。 而是直接把这些控件添加到 DockPanel.ControlContainer 对象的 Controls 集合中。
销毁停靠面板
示例 4
下列代码销毁了当前的活动面板:
C# | 复制代码 |
---|---|
dockManager1.RemovePanel(dockManager1.ActivePanel); |
Visual Basic | 复制代码 |
---|---|
dockManager1.RemovePanel(dockManager1.ActivePanel) |
停靠管理器的 DockManager.Clear 方法允许销毁由停靠管理器拥有的所有面板。