zoukankan      html  css  js  c++  java
  • VS .NET 窗体继承时错误解决方案

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

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

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

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

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

    终极解决方案:不要在基类窗体中注册Load、、等等事件.

    参考资料: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); //增加这行

        }

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

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

  • 相关阅读:
    笔记44 Hibernate快速入门(一)
    tomcat 启用https协议
    笔记43 Spring Security简介
    笔记43 Spring Web Flow——订购披萨应用详解
    笔记42 Spring Web Flow——Demo(2)
    笔记41 Spring Web Flow——Demo
    Perfect Squares
    Factorial Trailing Zeroes
    Excel Sheet Column Title
    Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/perzy/p/3470358.html
Copyright © 2011-2022 走看看