wifnorm处于设计模式校验 (.NET6)
.net6 winform开发过程中,
Form1 继承基类 frmBase
如果在基类 frmBase 的构造函数 或者 Load函数写了一些数据加载等代码,则打开Form1就会报错,打不开,
原因是因为新版winform开发,打开窗体设计器时,会调用基类的构造函数和窗体load事件,具体可以
C# 全选
public partial class frmBase : Form
{
public frmBase()
{
InitializeComponent();
MessageBox.Show("1 构造函数");
this.Load += FrmBase_Load;
}
private void FrmBase_Load(object? sender, EventArgs e)
{
MessageBox.Show("4 Load事件");
}
public override ISite Site
{
get => base.Site;
set
{
MessageBox.Show("2 Site Set");
base.Site = value;
}
}
protected override void OnLoad(EventArgs e)
{
MessageBox.Show("3 OnLoad");
base.OnLoad(e);
}
}
以上这段代码编译后,设计器中打开Form1,会依次弹窗 1 → 2 →3 → 4
这时候希望 在设计器中 不要运行构造函数和load中的代码,可以对基类做如下调整
C# 全选
public partial class frmBase : Form
{
public frmBase()
{
InitializeComponent();
MessageBox.Show("1 构造函数");
this.Load += FrmBase_Load;
}
private void FrmBase_Load(object? sender, EventArgs e)
{
if (isDesignTime) return;
MessageBox.Show("4 Load事件");
}
/// <summary>
/// 窗体是否处于设计模式下
/// </summary>
protected bool isDesignTime { get; private set; }
public override ISite Site
{
get => base.Site;
set
{
MessageBox.Show("2 Site Set");
base.Site = value;
isDesignTime = true;
}
}
protected override void OnLoad(EventArgs e)
{
if (isDesignTime) return;
MessageBox.Show("3 OnLoad");
base.OnLoad(e);
}
}
调整过后,在设计器中打开Form1窗体,只会弹出 1 → 2 的弹窗
如果运行项目,则会弹出 1 → 2 → 3 → 4 四个窗体
到此就解决了,正确的校验wifnorm窗体的设计模式,就可以控制设计模式下不要运行某些代码
注意,构造函数
中不要
写加载代码,因为在winform设计器
中,也会执行基类窗体的构造函数,比如例子中的 1 弹窗不管在什么情况下,都会被执行
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 张国生