【问题标题】:C# - WinForms - SDI or MDI Approach?C# - WinForms - SDI 或 MDI 方法?
【发布时间】:2011-08-15 18:36:13
【问题描述】:

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

  1. 一种“控制”表单,可以有 2 个按钮,最多可能有 10 个左右。因此,屏幕需要为最大数量的按钮提供足够的空间。
  2. 包含大型富文本框控件的“日志记录”表单。
  3. 一个“配置”表单,其中包含一个选项卡控件,其中包含可以调整的各种配置设置。
  4. 与 #2 非常相似的“订单日志”表单。

用户可能希望以不同的方式重新定位这些表单中的每一个。然而,我希望这些表单由父表单“管理”,这样当应用程序关闭时,所有其他表单都会关闭。有没有办法保持 MDI 方法,但允许子表单使用 C# WinForms 移动到父表单之外?谢谢!

【问题讨论】:

    标签: c# winforms mdi sdi


    【解决方案1】:

    通常在这种情况下,您会使用“对接”功能。在 Visual Studio 本身中也是如此。通过这种方式,用户可以非常轻松地隐藏/显示表单。

    Visual Studio 没有提供这样的包,但是有免费的库。以http://sdock.codeplex.com/ 为例。

    【讨论】:

      【解决方案2】:

      我曾使用过一些 MDI 应用程序并尝试过类似的方法。

      我从经验中学到了一些东西,你应该在决定之前考虑一下。

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

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-01-18
          • 2014-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多