C# - WinForms - SDI或MDI方法?

时间:2011-04-29 20:26:36

标签: c# winforms mdi sdi

我正在创建一个包含4种形式的Visual C#WinForms应用程序:

  1. 一个“控制”表单,其中包含2个按钮之间的任何位置,最多可能有10个左右。因此,屏幕需要为最大数量的按钮提供足够的空间。
  2. 一个“日志记录”表单,其中包含一个大型富文本框控件。
  3. “config”表单,其中包含一个带有各种配置设置的选项卡控件,可以进行调整。
  4. 与#2非常相似的“订单日志”表单。
  5. 用户可能希望以不同的方式重新定位每个表单。然而,我希望这些表单由父表单“管理”,以便在应用程序关闭时,所有其他表单都关闭。有没有办法保持MDI方法,但允许子表单使用C#WinForms移动到父表单之外?谢谢!

3 个答案:

答案 0 :(得分:4)

通常在这种情况下,您可以使用“对接”功能。同样的方法是在Visual Studio本身完成的。这样用户可以非常轻松地隐藏/显示表单。

这样的程序包不附带Visual Studio,但是有免费的库。例如,请查看http://sdock.codeplex.com/

答案 1 :(得分:2)

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

您可以在表单之间建立父子关系。或者,如果需要,可以在关闭主窗体时明确关闭其他窗体。

大多数系统正在远离MDI(例如Office),所以即使你有多种形式,我也可能选择SDI风格的界面。 MDI往往不能很好地利用屏幕空间,大多数现代用户都不习惯处理它的一些怪癖。

答案 2 :(得分:1)

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

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

我注意到MDI的一个原因是表单和控件的绘制速度似乎比常规表单慢一点。因此,当您单击链接/按钮并抛出一个新的子表单时,您可以看到它在视觉上将新的子表单绘制到屏幕上,这使您的应用程序看起来很迟钝。这已经在大量的硬件/操作系统组合和测试应用程序上进行了测试,这些测试应用程序除了打开带有一些控件的表单之外没有做任何事情。

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

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