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

wifnorm处于设计模式校验 (.NET6)

 

这时候希望 在设计器中 不要运行构造函数和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开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:winform绑定对象数据源
下一篇:win32api之添加水印
评论列表

发表评论

评论内容
昵称:
关联文章

wifnorm处于设计模式校验 (.NET6)
.NETCore-winform 判断是否设计模式
使用.NET 6开发TodoList应用(6)——使用MediatR实现POST请求
.Net 下高性能分表分库组件-连接模式原理
.NET SAAS 架构与设计 -SqlSugar ORM
API接口安全设计方案
使用.NET 6开发TodoList应用(10)——实现DELETE请求以及HTTP请求幂等性
.Net 6 添加NLog
.NET Core Winform 打开窗体设计器报错
数据绑定模式
使用.NET 6开发TodoList应用(22)——实现缓存
重新认识Docker Compose之Sidecar模式
使用.NET 6开发TodoList应用(26)——实现Configuration和Option的强类型绑定
使用.NET 6开发TodoList应用(14)——实现查询过滤
《步步入门》 .NET 6 部署到Linux
使用.NET 6开发TodoList应用(11)——使用FluentValidation和MediatR实现接口请求验证
Form数据校验
使用.NET 6开发TodoList应用(19)——处理OPTION和HEAD请求
.net core winform窗体继承后设计器异常,看不到控件,并且页无法添加控件
使用.NET 6开发TodoList应用(21)——实现API版本控制

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码