我有一个小的WinForms应用程序,主窗口的中心只有一个按钮。该按钮文字为按钮1 。 代码隐藏(F7)中的构造函数在调用 InitializeComponent 之后将该按钮文本更改为 Hello World 。
运行时显示" Hello World"但在设计时,设计师会显示"按钮1"。 WinForms运行自定义UI代码的正确方法是什么。如果我手动将该代码放入设计器文件中,那么下次保存设计器时我的更改会被覆盖。
这是我的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.button1.Text = "Hello World";
}
}
答案 0 :(得分:1)
标题说:
WinForms Designer应该从CodeBehind运行方法吗?
Designer非常棘手,因为你设计新类型Form1
它实际上会创建一个基类Form
的实例,然后让你修改它,生成{ {1}}和资源。
为确保代码在设计器中运行,您必须将其移至基类。这可以通过自定义控件:
来实现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();
}
}
。在编辑它时,后面的代码中的更改不会直接显示在设计器中。但是一旦你完成,编译它并将其添加到另一个表单 - 设计师将在编辑另一个表单时运行你的代码。您必须在每次更改用户控件后面的代码后重新编译。