Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最佳实践:在设计时或运行时添加控件_C#_.net_Winforms - Fatal编程技术网

C# 最佳实践:在设计时或运行时添加控件

C# 最佳实践:在设计时或运行时添加控件,c#,.net,winforms,C#,.net,Winforms,可能是一个愚蠢的问题,或者太主观,或者“这取决于”,但是。。。在设计时或运行时添加一些控件是否有任何首选项或最佳实践?在可移植性方面,从视图中分离模型,以及这些东西,它是否相关 例如,我需要使用FolderBrowser对话框。最好是在设计模式下将其添加到表单中,还是在运行时声明它 编辑:谢谢大家的回复。在这种情况下:我创建了一个按钮,供用户选择文件夹。我的想法是使用FolderBrowser对话框。我应该在“button clik”事件中声明FoleBrowserDialog还是在设计时将其嵌

可能是一个愚蠢的问题,或者太主观,或者“这取决于”,但是。。。在设计时或运行时添加一些控件是否有任何首选项或最佳实践?在可移植性方面,从视图中分离模型,以及这些东西,它是否相关

例如,我需要使用FolderBrowser对话框。最好是在设计模式下将其添加到表单中,还是在运行时声明它


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

使用设计器很好。在您给出的FolderBrowser示例中,我在不同的项目中都做过。但是,Luaan在处理手动创建的控件方面有一个很好的观点。

使用设计器是可以的。在您给出的FolderBrowser示例中,我在不同的项目中都做过。然而,Luaan在处理手动创建的控件方面有一个很好的观点。

这确实是“取决于”的

通常我不喜欢使用任何形式的UI设计器工具(只是我的观点,完全是主观的)

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

但有时,当我开发一个新的、小的、缺乏时间的应用程序时,我会毫不犹豫地从设计者那里获益。(如果您可以拖放控件,只需单击几下鼠标就可以调整它们的大小,这将非常快)


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

这确实是“视情况而定”

通常我不喜欢使用任何形式的UI设计器工具(只是我的观点,完全是主观的)

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

但有时,当我开发一个新的、小的、缺乏时间的应用程序时,我会毫不犹豫地从设计者那里获益。(如果您可以拖放控件,只需单击几下鼠标就可以调整它们的大小,这将非常快)


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

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

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

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

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

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

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

  • 不幸的是,这太宽泛了。答案肯定是“视情况而定”。你有没有一个更狭隘的例子来说明你想要实现的目标?Designer是一个工具。只要有助于你完成工作,就根据需要使用它。但是,如果您在运行时创建控件和组件,请不要忘记在不再需要它们时处理它们(如果您使用设计器,则会自动进行处理)。设计器是一种根据您在设计器中执行的操作生成
    .net
    代码的工具。打开
    YourForm.Designer.cs
    文件,将设计器生成的代码与您计划在“运行时”中使用的代码进行比较。那你