C# - WinForms - SDI or MDI Approach?
本文关键字:Approach MDI SDI WinForms or | 更新日期: 2023-09-27 17:53:42
我正在创建一个Visual c# WinForms应用程序,它将包含4个表单:
- 一个"控制"表单,将有两个按钮之间的任何地方,可能多达10个左右。所以屏幕将需要容纳足够的空间来容纳最大数量的按钮。
- 一个"日志"表单,将包含一个大的富文本框控件。
- 一个"配置"表单,将包含一个选项卡控件,可以调整各种配置设置。
- 一个与#2非常相似的"订单日志"表单。
用户很可能希望以不同的方式重新定位这些表单。然而,我希望这些表单由父表单"管理",这样当应用程序关闭时,所有其他表单都会关闭。是否有一种方法可以保持MDI方法,但允许使用c# WinForms的子窗体移动到父窗体之外?谢谢!
通常在这种情况下,您将使用"docking"功能。在Visual Studio中也是如此。这样,用户可以很容易地隐藏/显示表单。
Visual Studio中没有这样的包,但是有一些免费的库。例如,请查看http://sdock.codeplex.com/
我使用过一些MDI应用程序,并尝试过类似的东西。
我从经验中学到一些事情,你应该在做决定之前考虑一下。
我注意到MDI的一件事是,窗体和控件似乎比常规窗体慢一点。因此,当您单击链接/按钮并弹出一个新的子表单时,您可以看到它将新的子表单直观地绘制到屏幕上,这使您的应用程序看起来迟缓。这已经在大量的硬件/操作系统组合上进行了测试,并且测试应用程序除了打开带有一些控件的表单之外什么都不做。
关于MDI的另一件事是您的子窗口将包含在父窗口中,这对某些应用程序有效,但对其他应用程序来说很烦人。
MDI的另一个怪癖是,如果你有这样的需要,你不能使用窗口透明度。
你可以做任何你想做的事。
您可以在表单之间建立父子关系。或者,如果您愿意,可以在主表单关闭时显式关闭其他表单。
大多数系统都在远离MDI(比如Office),所以我可能会选择sdi风格的界面,即使你有几个表单。MDI往往不能很好地利用屏幕空间,而且大多数现代用户都不习惯处理它的一些怪癖。