应用程序的停靠面板和文档表单

在本教程中,将学习如何通过使用停靠面板来增加应用程序的可用性,类似于Visual Studio中的面板。将把文档区域从自由浮动窗口区域更改为停靠窗口区域,这样每个打开的文档都会有一个标签在文档顶部。此外,还将创建一个停靠在侧面的面板,用于增加应用程序的可用性。将使用此面板显示在活动文档中选定项目的详细信息,并允许向活动文档添加项目。首先,需要添加即将使用的停靠套件库的引用:

WeifenLuo.WinFormsUI.Docking,可以在以下网址找到:。该库已包含在本文的源包中,或者可以从上述网站获取。一旦获得它,请将其添加到项目中。

添加 DockPanel

现在让添加停靠系统的骨干,DockPanel。打开MDIForm的设计器视图。首先,需要将DockPanel添加到工具箱中,这样就可以将其添加到表单中。为此,右键单击工具箱,并选择“选择项目...”。向下滚动直到找到DockPanel并选中它。如果看不到它,可能需要点击浏览并选择WeifenLuo.WinFormsUI.Docking库。

现在,如果展开“所有Windows表单”控件组,在底部将看到DockPanel。让将其拖放到MDIForm上。将其命名为dockPanel,将其Dock属性设置为Fill,并将BackColor设置为AppWorkspace。这就是需要为DockPanel做的所有事情。

创建 DockContent

DockPanel是不同的DockContent对象的容器,这些对象是可以占据DockPanel内不同区域的表单,包括Float、Left、Right、Top、Bottom和Document区域。对于这个例子,将使用这两个区域,Document和Right。对于文档,将它们放在Document区域。还将创建一个特殊的表单,用于显示当前选定产品的详细信息,将将其放在Right区域。

创建DockContent很简单,对于任何想要使其停靠的Form,只需将其实现从Form更改为DockContent。让为PurchaseOrderForm这样做:

using WeifenLuo.WinFormsUI.Docking; public class PurchaseOrderForm : DockContent

这将为设计器视图中的表单提供一些额外的属性,但对于目的,不需要触摸它们。现在需要告诉表单停靠到DockPanel。回到MDIForm,在OpenFileShowNewForm方法中,将Form.Show()调用更改为Form.Show(dockPanel)。有一个重载的Show方法也接受一个特定的区域来放置内容,但默认情况下内容被放置在Document区域,这正是想要的PurchaseOrderForm实例。

private void ShowNewForm(object sender, EventArgs e) { ..... childForm.Show(dockPanel); } private void OpenFile(object sender, EventArgs e) { ..... purchaseOrderForm.Show(dockPanel); ..... }

这就是获得带标签的文档外观所需要的一切。

自动隐藏工具面板

现在,让为项目信息显示面板创建一个新的表单,将其停靠在右侧,并允许它自动隐藏。创建一个新的表单并将其命名为ItemInformationPanel。转到源视图,并添加一个WeifenLuo.WinFormsUI.Docking库的using语句,并将实现从Form更改为DockContent

using WeifenLuo.WinFormsUI.Docking; public class ItemInformationPanel : DockContent

现在希望这个面板在启动时可用,所以需要将其添加到DockPanel。在MDIForm中,让添加一个ItemInformationPanel的私有实例,并将其命名为itemInfoPanel,在构造函数中,让初始化itemInfoPanel,并将其添加到DockPanel,这次将指定想要内容占据的区域。

private ItemInformationPanel itemInfoPanel; public MDIForm() { ..... itemInfoPanel = new ItemInformationPanel(); itemInfoPanel.Show(dockPanel, WeifenLuo.WinFormsUI.Docking.DockState.DockRight); ..... }

现在进行测试运行,将看到面板,它显示在右侧停靠区域。现在让回到用DockContent获得的额外属性。第一个是AutoHidePortion,它控制表单在AutoHide模式下的大小。小于1的值将是%,大于1的值将是实际像素大小。可以根据喜好进行调整。接下来是DockAreas。这将内容限制在某些区域。停靠面板可以被用户抓住并移动,然后放到不同的区域。这将让允许或禁止某些区域。还可以根据应用程序的预期功能进行配置。最后一个非常重要,HideOnClose。这将保护表单在用户关闭时不会被处置。可以提供一个菜单选项来重新显示面板,如果尝试用已处置的表单来做这件事,会有问题,所以让将HideOnClose设置为True。现在,将Text属性更改为更短的,比如"Item Info"。这将减少AutoHide标题的大小。在开始添加多个AutoHide面板到同一个停靠区域之前,这不是什么大问题。最后,希望这个面板在AutoHide模式下开始,所以让修复它。将itemInfoPanel.ShowDockState更改为DockRightAutoHide

itemInfoPanel.Show(dockPanel, WeifenLuo.WinFormsUI.Docking.DockState.DockRightAutoHide);

对于这一部分的最后,让给用户一个恢复这个面板的方法,如果他们关闭了它。已经将HideOnClose设置为True,所以面板永远不会被处置,但现在需要给用户提供一种重新显示面板的方法。让转到视图菜单,并添加一个名为"Item Info Panel"的MenuItem。同时,将Checked属性设置为True,并将CheckOnClick属性设置为True。双击菜单项以创建点击处理程序。对于这个处理程序,简单地再次调用Show方法,如果菜单项被选中,或者调用Hide方法,如果菜单项未被选中,但这次,让在常规DockRight状态而不是DockRightAutoHide中显示它,因为用户最有可能需要面板,它将更容易获得。

private void itemInfoPanelToolStripMenuItem_Click(object sender, EventArgs e) { itemInfoPanel.Show(dockPanel, WeifenLuo.WinFormsUI.Docking.DockState.DockRight); }

最后一块拼图是找出用户何时关闭面板,并将菜单项Checked设置为False,以便重新显示将在菜单项再次点击时工作。为此需要处理itemInfoPanelFormClosing事件。由于正在处理此事件,表单现在将尝试关闭,所以需要将FormClosingEventArgs.Cancel设置为true,并调用itemInfoPanel.Hide来隐藏面板。

itemInfoPanel.FormClosing += itemInfoPanel_FormClosing; ..... private void itemInfoPanel_FormClosing(object sender, FormClosingEventArgs e) { itemInfoPanelToolStripMenuItem.Checked = false; e.Cancel = true; itemInfoPanel.Hide(); }

就是这样!将在这里结束,可以看到使用这个库获得一些不错的停靠效果是多么容易。接下来将完成物品信息面板。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485