`

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的机器上运行,如果不做专门的...

    父子窗体完美解決

    标题"父子窗体完美解决"和描述"父子窗体解决的完美方案"表明我们将探讨如何在编程中优雅地处理父子窗体之间的关系。 首先,我们要了解父子窗体的基本结构。在Windows Forms或WPF等.NET框架下,我们可以通过继承或...

    QQ窗体.zip

    9. **多态和继承**:如果有多处需要使用相似的窗体效果,可以考虑将通用部分抽象成一个基类,然后让其他窗体继承这个基类,这样可以提高代码的复用性和可维护性。 在实际开发中,可能还需要处理更多的细节,如窗口...

    详解使用C#制作不规则窗体的方法

    C#中的`System.Windows.Forms.Form`类是窗体的基础,我们可以通过继承这个类并覆盖其默认行为来创建自定义窗体。具体来说,我们需要关注`OnPaint`事件,这是窗体绘制自身的地方。在`OnPaint`事件处理程序中,我们...

    C#窗体大小控制

    为了解决这个问题,可以采取以下几种方法: 1. **最大化窗体**:通过将主窗体设置为最大化,可以使界面适应当前屏幕的大小,避免界面超出屏幕范围。 2. **容器模式**:将所有子窗体都放在主窗体内显示,并设置主...

    C#实现的窗体基本框架

    `Form`类是所有窗体的基础,你可以通过继承它来创建自定义的窗体。 创建一个基本的C#窗体,你需要在Visual Studio中选择“新建项目”->“Windows Forms应用程序”。这会自动为你生成一个包含默认窗体的解决方案。...

    窗体半透明控件不透明

    本文将深入探讨“窗体半透明控件不透明”这一问题,并提供相关的解决方案。 首先,我们需要理解Windows API中关于透明度的几个关键概念。在Windows系统中,窗体的透明度是通过调整其背景颜色的Alpha通道来实现的。...

    WPF窗口直接类继承

    1. **代码复用**:所有继承`MyCustomWindow`的窗口都可以使用其上的通用方法和属性。 2. **更好的组织**:将通用功能封装到一个基类中,可以使代码结构更清晰。 3. **易于维护**:修改基类会影响到所有子类,便于...

    vc窗体分割

    在百度C++贴吧这样的社区讨论中,你可以与其他开发者交流,解决遇到的问题,或者分享你的见解和经验。 总的来说,"vc窗体分割"是MFC编程中的一个重要概念,它涉及到Windows GUI设计、类的继承和消息处理等多个方面...

    C#创建窗体的单例模式

    在IT行业中,编程模式是一种解决常见问题的最佳实践方式,单例模式是其中之一,它确保一个类只有一个实例,并提供一个全局访问点。在C#中,特别是在开发Windows Forms(WinForm)应用程序时,单例模式可以帮助我们更...

    C#把MDI子窗体变为标签页面(不改写任何控件)

    为了解决这个问题,可以将MDI子窗体转换成标签页面的形式,通过TabControl控件来实现。这样既保留了MDI的特性,又提供了更直观、友好的用户界面。 标题中的“C#把MDI子窗体变为标签页面”指的是将原本作为MDI子窗体...

    MDI父子窗体的设计

    为解决这一问题,开发者可以实现子窗体的分组、缩略图预览、标签式导航等功能,以提高用户体验。 在压缩包中的"MDIwindows10_2"文件可能是示例代码或者相关资源,包含了MDI父窗体和子窗体的设计实例,供学习者参考...

    C#不规则窗体实现

    在新的代码文件中,我们继承自`System.Windows.Forms.Form`类,并重写其中的关键方法。 ```csharp using System; using System.Drawing; using System.Windows.Forms; public class IrregularForm : Form { ...

    WinForm高级开发解决窗体关闭,数据导出,一些简单控件的用法

    在Windows Forms(WinForm)开发中,我们经常会遇到各种挑战,比如如何优雅地处理窗体关闭事件、如何实现数据导出以及如何有效地使用基础控件。这篇文章将深入探讨这些关键知识点,帮助开发者提升WinForm应用的用户...

    C#窗体简单贪吃蛇

    **C#窗体简单贪吃蛇游戏开发** 贪吃蛇是一款经典的计算机游戏,它通过简单的规则和直观...这个项目不仅有助于理解C#编程和WinForm应用开发,而且能锻炼问题解决和逻辑思维能力,对于初学者来说是一个很好的实践项目。

    C#窗体循环显示图片

    在C#编程环境中,开发一个窗体应用来循环显示多张图片是一项常见的任务,尤其在创建用户界面或者制作多媒体展示时。本知识点将详细介绍如何利用C# WinForms技术实现这一功能,包括窗体设计、图像处理和定时器控件的...

    简单的C#编写的透明窗体程序

    3. **处理透明度**:默认情况下,窗体上的控件不会继承窗体的透明度。为了使控件也变得透明,需要重写窗体的`OnPaintBackground`方法,禁用默认的背景绘制,代码如下: ```csharp protected override void ...

    大量C#窗体皮肤素材及示例源码.rar

    C#中实现窗体皮肤的方法通常涉及以下几点: 1. **自定义控件**:通过继承.NET Framework提供的基础控件,如Button、Label等,然后重绘它们的外观,以实现个性化皮肤效果。这需要对GDI+(Graphics Device Interface ...

Global site tag (gtag.js) - Google Analytics