主窗体和继承窗体

程序将第一个创建的窗体作为主窗体。如果创建了一个后,在其他窗体尚未创建的时候便释放调,
此时又创建了一个窗体,那么第二次创建的窗体就会变成主窗体了。
 关闭主窗体,程序就认为是终止运行,并且调用 Free 释放掉主窗体资源,进而程序结束退出。
而关闭其他非主窗体,程序只是将其隐藏起来了。

  子窗体会将主窗体的属性方法继承下来,对于主窗体中手动增加的方法(即声明在访问控制级别
private、protected、published、public 中的方法),除非显示的增加 virtual 关键字,并在子
类中显示的使用 override 关键字,否则不会使用多态的方式来继承(即晚绑定的方式)。而窗体的
元素方法(即那些没有任何控制级别关键字限制的方法,如一个窗体的 FormCreate 方法,或者说窗
体根据用户的操作自动生成的方法),会默认的使用多态的方式来继承。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);  // 子窗体默认会使用多态的的形式继承
  private
    { Private declarations }
  public
    { Public declarations }
    procedure DoSomething;  // 除非使用 virtual 和 override 关键字,否则子窗体不
                 //会以多态的方式继承
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DoSomething;
begin
  // 除非使用 virtual 和 override 关键字,否则子窗体不会以多态的方式继承
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // 子窗体默认会使用多态的的形式继承
end;

end.

另注:在继承自己的窗体时,最好先将其加入工程,然后再使用向导来创建对应子类,否则
   会存在一个很“隐晦”,而且不易发现,虽然这个错误在运行时并没有发现有什么影
   响,但以防万一。(当用Ctrl+鼠标链接到父类窗体单元,再将其关闭,在鼠标放置
   到子类声明处class后括号中的父类时,编译器的提示信息好想就部能够检测到父类
   的信息了,于是报错了。还有就是创建的方法在使用ctrl + shift + c等自动创建代码
   的情况下,不会自动加入"inherited"关键字,似乎无法实现晚绑定。)

主窗体和继承窗体,布布扣,bubuko.com

时间: 2025-01-02 14:55:59

主窗体和继承窗体的相关文章

公共事件,修改主窗体和子窗体的(主题)样式

主窗体修改主题样式时,同时修改子窗体的主题样式 系统展示效果: 一.项目结构 二.代码分析 SetAllFormStyle 界面对象参数 /// <summary> /// 编写:yj /// 日期:2014-08-14 /// 描述:系统界面参数 /// </summary> public class SetAllFormStyle: System.EventArgs { public C1.Win.C1Ribbon.VisualStyle autoStyle { get; se

组合查询——如何使用窗体的继承达到事半功倍?

一个优秀的程序员就是要尽可能减少自己的代码量.我们日常的工作或者学习中都有可能遇到多个窗体结构类似,或者大同小异的情况,这时候如果在每个窗体都写一遍代码,或者纯粹的复制粘贴就太水了.想要偷懒的时候正是我们发现和创造的机会,我们的祖先也是这么过来的. 我在做机房收费系统个人重构版的时候,就遇到了基本数据维护.查看上机状态.上机信息统计和操作员工作记录四个窗体都组要用到组合查询而且窗体结构一致. 四个窗体中除了字段名不一致,其他的内容都一样,这种情况下我们用窗体的继承最合适了.在父窗体中写好公共的部

窗体的复用----窗体继承

众所周知,在面向对象的软件开发中,通过对类的封装和抽象,可以对类进行继承,从而实现代码复用和增加软件的可维护性.那么,窗体能不能继承呢?在重构机房收费系统的时候遇到了如下问题: 相似的几个功能,窗体布局一模一样,如果使用以前的方法,只能复制.粘贴这些窗体和控件,可是,控件可以复制,名字却不能复制:如果改其中的一项数据的话,需要修改好几个窗体,可维护性差:U层.B层.D层代码相似度很高,代码复用性太低等等.怎么解决这些问题呢? 类可以进行抽象.封装,然后可以继承以复用,窗体能不能看做一个特殊的类?

2016.6.18主窗体、子窗体InitializeComponent()事件、Load事件发生顺序以及SeleChanged事件的发生

主窗体,子窗体的InitializeComponent(构造函数).Load事件执行顺序 1.主窗体定义事件 new 主窗体() 构造函数进入主窗体InitializeComponent函数,该函数中有各字框体的new创建语句,因此: 2.依次执行各子窗体InitializeComponent函数 3.主窗体new事件结束后,并不创建任何窗体或子窗体,也就没有任何Load事件发生.直到主窗体Show事件. 4.主窗体Show事件后,顺序执行各子窗体Load事件,注意!!并不是先执行主窗体Load

手动修改继承窗体

转自http://blog.csdn.net/atian2009/article/details/7478234 1.手工修改窗体继承时,怎样让其父类的所有控件显示(在设计时)? File -> New -> Form,新建一个form,在form的单元文件中修改 TForm1 = class(TForm) 为: TForm1 = class(TFatherForm) //TFatherForm为被继承的窗体 不要忘记  uses TFatherForm的单元文件, 再在Form窗体上弹出右键

MDI和继承窗体设计

MDI窗体设计:(Multiple-Document Interface) 用途:用于同时显示多个文档,每个文档显示在各自的窗体中. 起到容器作用的窗体被称为"父窗体",可放在父窗体中的其他窗体称为"子窗体",也称为"MDI子窗体". 每个应用程序只能有一个父窗体,并且其他子窗体不能移出父窗体的框架区域. 1.设置父窗体: 在窗体的属性面板 将IsMdiContainer属性设置为True即可 2.设置子窗体: 通过设置窗体的MdiParent属

C#如何操作另一个窗体:[1]主窗体操作子窗体(转)

方法/步骤 1 首先,我们建立一个项目,然后往窗体拖入一个按钮 2 我们在项目管理那里,右击,选择"添加",再选择"windows窗体" 3 我们回到窗体1,双击按钮,打开代码窗口   在代码窗口中,我们输入代码 Form2 a = new Form2(); a.Show(); 这几句话的意思是,实例化一个Form2,然后弹出窗体   我们启动程序测试,点击程序窗口中的按钮   OK,现在你看到form2弹出来   我们回到form1中,打开form1的代码,然后在

子窗体、父窗体方法互调

var childWindow = $("#editFrame")[0].contentWindow;//获取子窗体的window对象. childWindow.subForm(); $("#editFrame")得到frame [0].contentWindow//frame的子窗体,将JQUERY对象转化为DOM对象 subForm();//字窗体定义的方法 ----------------------------------------------------

MFC获得主窗体和父窗体指针

MFC编程中经常遇到子窗体向父窗体传递參数的情况,这就须要获得父窗体的指针. 例:主对话框CMyMainDlg通过buttonButtonA进入对话框CMyParentDlg.CMyParentDlg在通过buttonButtonB进入对话框CMyChildDlg.如今须要在CMyChildDlg分别訪问CMyParentDlg和CMyMainDlg的内容.须要在CMyChildDlg中增加下面两条语句: CMyMainDlg    *pMMD = (CMyMainDlg*)AfxGetMain