WinForms Designer应该从CodeBehind运行方法吗?

时间:2017-12-20 12:29:45

标签: c# .net winforms windows-forms-designer

我有一个小的WinForms应用程序,主窗口的中心只有一个按钮。该按钮文字为按钮1 。 代码隐藏(F7)中的构造函数在调用 InitializeComponent 之后将该按钮文本更改为 Hello World

运行时显示" Hello World"但在设计时,设计师会显示"按钮1"。 WinForms运行自定义UI代码的正确方法是什么。如果我手动将该代码放入设计器文件中,那么下次保存设计器时我的更改会被覆盖。

这是我的代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.button1.Text = "Hello World";
    }
}

1 个答案:

答案 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(); } } 。在编辑它时,后面的代码中的更改不会直接显示在设计器中。但是一旦你完成,编译它并将其添加到另一个表单 - 设计师将在编辑另一个表单时运行你的代码。您必须在每次更改用户控件后面的代码后重新编译。