`

vs2010 继承窗体的问题解决办法

 
阅读更多

WinForm窗体继承是必须的,但是vs的窗体继承不如Delphi那样随心所欲。

1、从父类继承一个窗体后,发现打开子类窗体的设计界面时出错了,错误提示各种各样,原因只有一个:

由于vs的继承是必须先生成组件后,再从组件中继承的,所以当父类窗口有load或shown这类的事件时,继承它的子窗体就会先执行这一类的事件。假如父窗口的load事件中有一些类似连接数据库的操作,则往往会出错而无法设计。

简单的解决方法是在父窗口的load或shown事件中加入:

if (!DesignMode) { 你的代码段..... }

参考资料:http://www.cnblogs.com/batoosai/archive/2006/04/05/367484.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); //增加这行

    }

   如果你有多层窗体继承,可以如法炮制,只要把各层父类的按钮事件改名即可。

   因为会执行父类按钮事件是父类有事件委托,去除委托就可以了,这比网上说的虚函数重载方法要方便得多。 

 

分享到:
评论

相关推荐

    winform泛型类窗体继承解决办法C#小Demo

    winform窗体继承泛型类时,设计器无法使用解决办法: 当我们使用winform程序时,winform窗体程序和控件程序都是可以通过设计器进行控件拖拽的,但如果我们继承了一个带有泛型的form基类.那么设计器是无法使用的. 这时...

    C#泛型类窗体继承设计器无法使用解决办法,解决案例Demo

    winform窗体继承泛型类时,设计器无法使用解决办法: 当我们使用winform程序时,winform窗体程序和控件程序都是可以通过设计器进行控件拖拽的,但如果我们继承了一个带有泛型的form基类.那么设计器是无法使用的.

    Delphi编制的自适应屏幕分辨率的窗体继承类

    程序代码很短,但很有用,解决了Delphi程序设计中窗体及其包含的控件自适应不同屏幕分辨率的问题。 即你的程序可能是在1024X768屏幕分辨率下设计的,但是需要在屏幕分辨率为1280X1024的机器上运行,如果不做专门的...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    出版时间:2010年09月 页数:800 介绍 享有全球盛誉的编程专家Jeffrey Richter,这位与Microsoft .NET开发团队合作长达8年时间的资深顾问,在本书中和读者分享他编程生涯中积累的所有丰富经验和心得,他的独到、...

    在类库或winform项目中打开另一个winform项目窗体的方法

    那麽在A中添加一个接口,里面有一个Show方法,然后在B中写一个类b继承这个接口,并重写这个方法,具体内容为弹出某个窗体.然后在A中另一个类a中实例化B中的b类,并把它赋给A中的接口,然后调用接口的Show方法就可以弹出B...

    Visual C# 2010程序设计教程(教程PPT+源代码)

     《高等学校计算机应用规划教材:Visual C# 2010程序设计教程》详细介绍了Visual C# 2010程序设计的基础知识、基本方法和应用技巧,共分14章,主要内容包括.NET平台与Visual Studio 2010开发环境、C#语言基础及面向...

    WeifenLuo.WinFormsUI.Docking

    vs2010添加WeifenLuo.WinFormsUI.Docking.DockPanel.dll文件后,从工具栏中添加DockPanel控件时报错,提示【类型 Universe 无法解析程序集: System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5...

    高仿QQ2014,MDI,主题换肤

    2.解决个人信息卡和天气窗体显示后不会消失的问题。 3.各种细节BUG优化。 CC2013-9.5.1 1.解决贴边左右隐藏的BUG。 2.解决窗体点击事件不能触发的问题。 3.优化SkinButton继承父容器背景色的代码。 4.解决...

    [精仿]QQ2013局域网通讯(10.30更新版-带最新版界面库)

    16.按钮控件背景色拥有继承窗体背景主色调的功能,让整体色调保持一致。 17.更是有和如出一辙的扣扣截图。仿真度也达到100%,完美修复所有已知BUG。 18.聊天窗口,可以调字体颜色和字体样式等多项功能。 20....

    tooltrip漂浮(在toolstrippanel和之外)

    放置到ToolStripPanel上的,当工具栏浮动的时候,事实上是改变了其所在的容器对象,从其所在的ToolStripPanel移动到一个漂浮的容器上,因此要实现工具栏的浮动必须解决以下两个问题:  必须有一个浮动的容器来承载...

    高级程序设计--简答题总结.docx

    从声明看,窗体是一个类,继承了Form,具有类的一切特征,当然也可以实例化一个对象。 简述解决方案和项目的区别与联系? 解决方案:逻辑相关的项目的集合。可以包含不同类型的项目。解决方案的产出目标是软件产品...

    精仿QQ2013局域通讯(7.5更新版)

    16.按钮控件背景色拥有继承窗体背景主色调的功能,让整体色调保持一致。 17.更是有和如出一辙的扣扣截图。仿真度也达到100%,完美修复所有已知BUG。 18.聊天窗口,可以调字体颜色和字体样式等多项功能。 20....

    C#入门——面向对象等,代码+注释

    第12天 01接口 02接口的特点 03接口练习 03解决接口与方法重名问题 04收银系统 Banana BuDaZhe CangKu ....... 第13天 01第12天_接口 第14天 01MDI窗体设计 02PictureBox实现图片切换 03PictureBox和timer练习 第...

    delphi 开发经验技巧宝典源码

    0042 如何继承父类的方法 27 0043 如何实现函数重载 28 0044 类中多态的应用 28 0045 将函数作为参数进行调用 30 2.3 参数与指针 30 0046 通过指针读写数据 30 0047 在过程中使用常量参数 31 0048 在...

    Visual C# 2005程序设计自学手册 随书源码第一部分(共三部)

    7.3.2 继承窗体的使用 137 7.4 本章小结 138 第8章 WinForms应用程序开发常用控件 139 8.1 控件概述 140 8.1.1 控件的作用 140 8.1.2 控件的属性、方法和事件 140 8.2 控件的分类 142 8.2.1 常用...

    delphi 开发经验技巧宝典源码06

    0042 如何继承父类的方法 27 0043 如何实现函数重载 28 0044 类中多态的应用 28 0045 将函数作为参数进行调用 30 2.3 参数与指针 30 0046 通过指针读写数据 30 0047 在过程中使用常量参数 31 0048 在...

Global site tag (gtag.js) - Google Analytics