VS .NET 窗体继承时错误解决方案
2013-12-12 00:18
176 查看
WinForm窗体继承是必须的,但是vs的窗体继承不如Delphi那样随心所欲。
1、从父类继承一个窗体后,发现打开子类窗体的设计界面时出错了,错误提示各种各样,原因只有一个:
由于vs的继承是必须先生成组件后,再从组件中继承的,所以当父类窗口有load或shown这类的事件时,继承它的子窗体就会先执行这一类的事件。假如父窗口的load事件中有一些类似连接数据库的操作,则往往会出错而无法设计。
简单的解决方法是在父窗口的load或shown事件中加入:
if (!DesignMode) { 你的代码段..... }
终极解决方案:不要在基类窗体中注册Load、、等等事件.
参考资料:/article/5186821.html
2、屏蔽父窗体的事件
继承窗体一定有一些例外事件,比如父窗体的FormClosed事件写了日志,而子窗体不希望写日志而是其它操作,这就需要屏蔽父类事件。
首先把父类的事件改名,如按钮事件改如下(baseform是父类名称,仅用于易区分,可以是任何字符)并改成protected权限
protected void button1_Click_baseform(object sender, EventArgs e)
设计器baseform.Designer.cs里面也要对应改一下才能通过编译
this.button1.Click += new System.EventHandler(this.button1_Click_baseform);
子类可以正常使用按钮事件,仅在需要屏蔽父类按钮事件时,在子类的构造函数中把对应事件的父类委托去除即可,如下
public Form1()
{
InitializeComponent();
this.button1.Click -= new EventHandler(base.button1_Click_baseform); //增加这行
}
如果你有多层窗体继承,可以如法炮制,只要把各层父类的按钮事件改名即可。
因为会执行父类按钮事件是父类有事件委托,去除委托就可以了,这比网上说的虚函数重载方法要方便得多。
1、从父类继承一个窗体后,发现打开子类窗体的设计界面时出错了,错误提示各种各样,原因只有一个:
由于vs的继承是必须先生成组件后,再从组件中继承的,所以当父类窗口有load或shown这类的事件时,继承它的子窗体就会先执行这一类的事件。假如父窗口的load事件中有一些类似连接数据库的操作,则往往会出错而无法设计。
简单的解决方法是在父窗口的load或shown事件中加入:
if (!DesignMode) { 你的代码段..... }
终极解决方案:不要在基类窗体中注册Load、、等等事件.
参考资料:/article/5186821.html
2、屏蔽父窗体的事件
继承窗体一定有一些例外事件,比如父窗体的FormClosed事件写了日志,而子窗体不希望写日志而是其它操作,这就需要屏蔽父类事件。
首先把父类的事件改名,如按钮事件改如下(baseform是父类名称,仅用于易区分,可以是任何字符)并改成protected权限
protected void button1_Click_baseform(object sender, EventArgs e)
设计器baseform.Designer.cs里面也要对应改一下才能通过编译
this.button1.Click += new System.EventHandler(this.button1_Click_baseform);
子类可以正常使用按钮事件,仅在需要屏蔽父类按钮事件时,在子类的构造函数中把对应事件的父类委托去除即可,如下
public Form1()
{
InitializeComponent();
this.button1.Click -= new EventHandler(base.button1_Click_baseform); //增加这行
}
如果你有多层窗体继承,可以如法炮制,只要把各层父类的按钮事件改名即可。
因为会执行父类按钮事件是父类有事件委托,去除委托就可以了,这比网上说的虚函数重载方法要方便得多。
相关文章推荐
- VS Studio中复制窗体产生obj\Debug\SXP227\newform2.resources”在“Resources”参数中指定了多次。“Resources”参数不支持重复项 错误解决方案
- VS.NET2005打包程序遇到不可恢复的生成错误,解决方案
- VS.NET常见错误及解决方法集锦
- VS.net 安装、调试的常见问题与错误
- Vs.net 2005编译或者运行时报“没有找到MSVCR80D.dll...”错误的解决办法
- Vs3013 SDKDDKVer.h 找不到等错误的解决方案之一
- 在VS.NET内使用“从源代码管理打开”时出现无法读取项目文件的错误
- VS2013 编译程序时报无法加载PDB文件错误解决方案
- 多匹配递归删除指定文件/文件夹,用以简便备份你的VS.NET解决方案 (1:清理垃圾文件)
- vs生成解决方案错误无法将文件“xx.*”复制到xx.*”。对路径“bin\xx.*”的访问被拒绝
- 意外地发现,VS.NET从解决方案资源管理器中把ascx文件拖到aspx的设计视图里就可以添加用户控件
- vs C# 继承窗体类出现“文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类”无法打开设计器的错误
- VS.NET调试.NET出现的常见错误处理
- VS错误提示:解决方案配置(一)
- VS.NET中的"生成解决方案"和"重新生成解决方案"有什么区别?
- VS.NET2005运行webform出现的错误
- net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案
- WinForm设计时异常】关于VS.NET中窗体设计器初始化控件引发的设计时异常
- 透过vs.net数据窗体向导看Ado.net
- asp.net常见错误提示及解决方案