WinForms Designer应该从Code Behind运行方法吗?

问题描述 投票:0回答:1

我有一个小的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";
    }
}
c# .net winforms windows-forms-designer
1个回答
1
投票

标题说:

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

© www.soinside.com 2019 - 2024. All rights reserved.