vb.net继承、悬浮窗口、Form.show()方法
2012-07-23 22:38 beileierhao 阅读(3726) 评论(0) 编辑 收藏 举报1、继承
之前也看过不少关于继承的概念,可是都是云里雾里,今天终于弄明白了。最为OOP的一个重要概念,理解了继承,对OOP也有了更好的理解。
类的继承:假设有三个类:ClassA,ClassB,ClassC。ClassA的方法有走路,ClassB的方法有走路、吃饭,ClassC的方法有走路、吃饭、交男盆友。那么,通过ClassB继承于ClassA,ClassC继承于ClassB来实现的就很简单了,写好了ClassA,那么ClassB只需要再写吃饭,ClassC只需要再写交男盆友。
基本程序的含义:
Public Class Form1:Inherits System.Windows.Forms.Form End Class
或者
Pubic Class Form1 Inherit System.Windows.Forms.Form End Class
但是System.Window.Forms里有很多类,Form是在第七层。很多时候在没有表明继承于Form时,我们却能运行出窗体,这是因为VB.proj指定了一个首先运行的类--Form类。在运行这个类时会先运行 Public sub new() end sub 。就像运行项目时,先运行sub main()一样。
以上主要是参考http://www.xker.com/page/e2007/0131/22031_2.html
有的时候sub new()中会出现MyBase.New()。
MyBase是提供了一种引用当前类实例的基类的方式。
在MSDN中MyBase.New的解释是这样的:在派生类中,每个构造函数必须调用基类构造函数 (MyBase.New)。 如果该基类有一个可由派生类访问的不带参数的构造函数,则可以自动调用 MyBase.New。 否则,基类构造函数必须带参数调用,而这无法自动执行。 在此情况下,每个派生类构造函数的第一个语句必须调用基类上的一个参数化构造函数,或在调用基类构造函数的派生类中调用另一个构造函数。
简单的理解就是,如果父类(基类)没有New()方法时,系统会自动构建一个new函数,子类可以不写mybase.new,因为它也可以自动构建new函数;如果基类有一个不带参数的构造函数new(),那么子类也可以不写mabase.new;如果基类有一个带参数的构造函数new(a),那么子类必须写mybase.new(a)。
这样做的主要原因是,vb.net默认的是构建函数是new(),如果基类中该构造函数带有参数,系统无法默认调用,必须我们自己声明。
主要参考:http://topic.csdn.net/t/20031210/20/2550260.html
2.VB.NET浮动窗口
主要用到的是WeiFenLuo.winFormsUI.Docking.dll这个第三方开源控件。
dockpanel 中提供了几个可用的类, 重要的有两个, 一是 DockPanel, 一是 DockContent, DockPanel 是从 panel 继承出来的, 用于提供可浮动的 dock 的子窗口进行浮动和 dock 的场所, DockContent 是从 form 类中继承出来的, 用于提供可浮动的窗口基类. 就是说: DockContent 对象可 以在 DockPanel 对象中任意贴边, 浮动, TAB 化等.
使用过程如下: http://archive.cnblogs.com/a/2074480/
问题1: 在修改窗体继承于DockContent时,会出现“类“Form1”指定的基类“BasePanel.Docking.DockContent”不能与它的其他分部类型之一的基类“System.Windows.Forms.Form”不同”的错误。正如上面所说,Form1默认继承于System.Windows.Forms.Form,而BasePanel.Docking.DockContent和System.Windows.Forms.Form是不同类型的类,所以不存在继承。所以要改变Form1.designer.vb中改变其默认的类为BasePanel.Docking.DockContent。
问题2:“Invalid parent form. When using DockingMdi or SystemMdi document style, the DockPanel control must be the child control of the main MDI container form”解决:在添加dockpanel控件窗体中,把设置主窗体 IsMdiContainer=true,如果还有异常则设置主窗体dockpanel 的documentstyle :dockPanel.DocumentStyle = DocumentStyle.DockingSdi。
3.Form.show()方法
Form.show() 向用户显示控件。
Form.show(IWin32Windows) 向用户显示具有指定所有者的窗体。