窗体继承什么时候用的到呢?当我们使用三层架构来编写我们的cs程序时,我们的U层大部分是windows窗体。这个时候如果我们有一些公共变量,或者是一个窗体需要使用另一个窗体的数据。或者是有一些用于判断的公共的方法。比如为空判断、合法判断。对于这些判断而言。我们当然可以在U层放一个类。然后需要用到这些函数的时候就从这些类里面掉。对于需要用到其他窗体的变量我们当然可以用  (U窗体).变量  的方式调用。但现在的问题出来了。如果我某一天这个窗体的不想要了,那任何用到我这个窗体变量的窗体就统统的瘫痪了。这是不是就存在过于的耦合的。然后说放在一个公共的类里面。这样确实很好。但是不免让人家说你这个有点四不像了。U层放界面的地方你却放了类进去。这个时候窗体继承自然就出来了。而且我们会发现我们需要调用父类的方法。在子类中能直接写出来了。

但不了解窗体继承还是会有些问题的。


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

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

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

if not me.DesignModethen
.....
end if

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);

子类可以正常使用按钮事件,仅在需要屏蔽父类按钮事件时,作如下修改

在子类设计器Form1.Designer.cs里面把父类事件去除即可

this.button1.Click -= newSystem.EventHandler(this.button1_Click_baseform);   //注意这行

this.button1.Click += new System.EventHandler(this.button1_Click);

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

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

希望这点东西能让你更好的了解vs的工作机制,以及对窗体继承能更好的利用。

最新文章

  1. JavaScript系列文章:自动类型转换-续
  2. Java_太阳系_行星模型_小游戏练习_详细注释
  3. 关于requirejs
  4. firefox 插件 URLRedirector 审核通过
  5. 开启 mysql 远程访问
  6. VS2013安装oepncv2.4.10 以及opencv 3.0.0
  7. Nordic Semiconductor nRF52832 蓝牙智能多协议单芯片解决方案荣获《中国电子商情》编辑选择奖
  8. DragRigidbody2D
  9. JQuery基础教程:选择元素(中)
  10. Android开发之获取状态栏高度、屏幕的宽和高
  11. 【解决】Maven myeclipse出现Could not find the main class
  12. Away3d 骨骼动画优化
  13. svn恢复到某一版本
  14. linux apache 打模块示例
  15. MQTT控制---pingreq
  16. 2018-2019-2 20175228实验一《Java开发环境的熟悉》实验报告
  17. 服务端spark gbdt模型计算性能优化
  18. Java并发编程:synchronized、Lock、ReentrantLock以及ReadWriteLock的那些事儿
  19. centos6安装nginx
  20. Cron连接正常工作5次后异常原因分析

热门文章

  1. 打印Ibatis最后,SQL声明
  2. MVC+Jqgrid
  3. C# 我的注册表操作类
  4. lucent检索技术之创建索引:使用POI读取txt/word/excel/ppt/pdf内容
  5. QT最简单的程序执行过程分析(内含C++基础知识)
  6. leetcode第四题--Add Two Numbers
  7. MVC 用扩展方法执行自定义视图,替代 UIHint
  8. hdu 2795 段树--点更新
  9. ASP.NET MVC+Knockout+Web API+SignalR
  10. 实现Client Credentials Grant