我有一个小的WinForms应用程序,主窗口中心只有一个按钮。那就是按钮文本是按钮1。代码背后的构造函数(F7)在调用F7后将按钮文本更改为Hello
运行时显示"Hello“,但在设计时设计器显示"Button 1”。在WinForms中运行自定义UI代码的正确方法是什么?如果我手动将该代码放入designer文件中,则下次保存designer时,更改将被重写。
这是我的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.button1.Text = "Hello World";
}
}发布于 2017-12-20 13:02:05
标题是:
WinForms设计器应该从CodeBehind运行方法吗?
设计器很棘手,因为您正在设计新类型的Form1,它实际上将创建一个基类Form的实例,然后让您修改它,为您生成designer.cs和资源。
要确保代码在designer中运行,必须将其移动到基类。这可以通过定制控件来实现。
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。在编辑它时,后面的代码更改不会直接显示在设计器中。但是一旦完成,编译它并将其添加到另一个表单--当编辑另一个表单时,设计器将在那里运行您的代码。但是,在对用户控件后面的代码进行每次更改之后,您将不得不重新编译。
https://stackoverflow.com/questions/47906114
复制相似问题