我有一个小的WinForms应用程序,在主窗口的中心只有一个按钮。这个按钮文本是按钮1.后面的代码(F7)中的构造函数在调用InitializeComponent后将该按钮文本更改为Hello World。
运行时显示“Hello World”,但在设计时Designer显示“按钮1”。 WinForms运行自定义UI代码的正确方法是什么。如果我手动将该代码放入设计器文件中,那么下次保存设计器时我的更改会被覆盖。
这是我的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.button1.Text = "Hello World";
}
}
标题说:
WinForms Designer应该从Code Behind运行方法吗?
设计师很棘手,因为你正在设计新类型Form1
它实际上会创建一个基类Form
的实例,然后让你修改它,为你生成designer.cs
和资源。
要确保代码在设计器中运行,您必须将其移动到基类。这可以通过自定义控件来实现:
public class MyForm: Form
{
protected button1;
public MyForm()
{
button1 = new Button { Text = "Hello World" }; // here
Controls.Add(button1);
}
}
现在,当您从中继承新表单时,所有这些表单都会有一个按钮。
public partial class Form1 : MyForm
{
public Form1()
{
InitializeComponent();
}
}
为了让新用户更容易,有UserControl
。在编辑它时,后面的代码中的更改不会直接显示在设计器中。但是一旦你完成,编译它并将其添加到另一个表单 - 设计师将在编辑另一个表单时运行你的代码。在对用户控制后面的代码进行每次更改之后,您将不得不重新编译。