C# - WinForms - SDI or MDI Approach?

本文关键字:Approach MDI SDI WinForms or | 更新日期: 2023-09-27 17:53:42

我正在创建一个Visual c# WinForms应用程序,它将包含4个表单:

  1. 一个"控制"表单,将有两个按钮之间的任何地方,可能多达10个左右。所以屏幕将需要容纳足够的空间来容纳最大数量的按钮。
  2. 一个"日志"表单,将包含一个大的富文本框控件。
  3. 一个"配置"表单,将包含一个选项卡控件,可以调整各种配置设置。
  4. 一个与#2非常相似的"订单日志"表单。

用户很可能希望以不同的方式重新定位这些表单。然而,我希望这些表单由父表单"管理",这样当应用程序关闭时,所有其他表单都会关闭。是否有一种方法可以保持MDI方法,但允许使用c# WinForms的子窗体移动到父窗体之外?谢谢!

C# - WinForms - SDI or MDI Approach?

通常在这种情况下,您将使用"docking"功能。在Visual Studio中也是如此。这样,用户可以很容易地隐藏/显示表单。

Visual Studio中没有这样的包,但是有一些免费的库。例如,请查看http://sdock.codeplex.com/

我使用过一些MDI应用程序,并尝试过类似的东西。

我从经验中学到一些事情,你应该在做决定之前考虑一下。

我注意到MDI的一件事是,窗体和控件似乎比常规窗体慢一点。因此,当您单击链接/按钮并弹出一个新的子表单时,您可以看到它将新的子表单直观地绘制到屏幕上,这使您的应用程序看起来迟缓。这已经在大量的硬件/操作系统组合上进行了测试,并且测试应用程序除了打开带有一些控件的表单之外什么都不做。

关于MDI的另一件事是您的子窗口将包含在父窗口中,这对某些应用程序有效,但对其他应用程序来说很烦人。

MDI的另一个怪癖是,如果你有这样的需要,你不能使用窗口透明度。

你可以做任何你想做的事。

您可以在表单之间建立父子关系。或者,如果您愿意,可以在主表单关闭时显式关闭其他表单。

大多数系统都在远离MDI(比如Office),所以我可能会选择sdi风格的界面,即使你有几个表单。MDI往往不能很好地利用屏幕空间,而且大多数现代用户都不习惯处理它的一些怪癖。