【问题标题】:Best Practices: Add controls in Design-Time or Run-Time最佳实践:在设计时或运行时添加控件
【发布时间】:2016-12-26 15:40:37
【问题描述】:

可能是一个愚蠢的问题,或者过于主观,或者“视情况而定”,但是......在设计时或运行时添加一些控件是否有任何偏好或最佳实践?就可移植性、从视图中解耦模型以及这些东西而言,它是否相关?

例如,我需要使用 FolderBrowserDialog。应该在设计模式下将其添加到表单中,还是在运行时声明它?

编辑:谢谢大家的回复。在这种特殊情况下:我为用户创建了一个按钮来选择一个文件夹。我的想法是使用 FolderBrowserDialog。我应该在“按钮单击”事件中声明 FoleBrowserDialog 还是在设计时将其嵌入表单中?对我来说,在设计时创建它更容易,因为所有表单都可以轻松访问属性,但我认为在事件函数中声明它更正确,在字符串中收集路径,处置控件,返回值。为什么?使用 FileBrowserDialog 是“按钮单击”事件处理程序的“实现细节”,与表单的其余部分无关。解耦:)

【问题讨论】:

  • 不幸的是,这太宽泛了。答案肯定是“视情况而定”。你有一个更窄的例子来说明你想要实现的目标吗?
  • 设计师是一个工具。只要它可以帮助您完成工作,就可以根据需要使用它。但是,如果您在运行时创建控件和组件,不要忘记在不再需要它们时将它们释放(如果您使用设计器,它会自动发生)。
  • Designer 是一个根据您在设计器中执行的操作生成.net 代码的工具。打开YourForm.Designer.cs 文件并比较Designer 生成的代码和您计划在“运行时”中使用的代码。然后您可以自己决定有什么不同以及哪种方法最适合您
  • 它的表单不是动态的,所以控件将保持在原处,并且在任何情况下都不会弹出控件,而不是当设计师可以为您执行此操作时,为什么还要进行如此多的编码?使用设计器并不是坏习惯。
  • 您可以根据需要使用代码或使用设计器。使用设计师没有什么不好。它是帮助您更快地开发应用程序的真正好工具。但有时您可能需要使用代码动态生成 UI。看看这个帖子:Why should I insert a non-UI Windows.Forms component from the designer?

标签: c# .net winforms


【解决方案1】:

一般来说,使用设计器或在代码中定义控件变量没有区别,因为设计器在将控件拖放到表单中后还提供了一些等效的 C# 代码。您可以在带有 *.Designer.cs 前缀的文件中看到此自动生成的代码,并且您可以编辑和更改自动生成的代码

但是在某些特定情况下,您可能更喜欢在代码中手动定义控件。
例如:

  1. 有时可以在运行时动态更改控件的计数、排列和配置。例如,您的应用程序旁边有一个配置文件,该配置文件中的一些可变参数决定了您的 GUI 中某些控件的数量和属性。
  2. 您可能更愿意将控件的定义范围限制为单个函数,而不是整个命名空间或整个表单类。

【讨论】:

  • 谢谢!非 UI 控件的范围是需要牢记的重要事项!我将编辑我的问题以反映这一点:)
【解决方案2】:

使用设计器很好。在您提供的 FolderBrowser 示例中,我在不同的项目中都做过。不过,Luaan 关于处理手动创建的控件有一个很好的观点。

【讨论】:

    【解决方案3】:

    确实是“取决于”。

    通常我讨厌使用任何形式的 UI 设计工具(仅代表我的观点,完全是主观的)。

    我不喜欢表单中的每个控件都定义为类级别的字段(如果我使用设计器就会发生这种情况),例如一些在初始化后永远不会改变的标签。作为回报,如果您在运行时创建标签,则无法在 UI 设计器中看到它们。

    但有时当我在开发一个新的、小型且时间紧迫的应用程序时,我会毫不犹豫地从设计师那里受益。 (如果您可以拖放控件,只需单击几下鼠标就可以调整它们的大小,这真的很快)

    我认为底线是您必须知道在设计者分配控件和自己在运行时创建它们之间发生了什么。之后,这个问题将变成一个简单的“我要购买哪款显示器”,您可以根据自己的要求使用任何您想要的工具/方法。

    【讨论】:

      猜你喜欢
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      相关资源
      最近更新 更多