在做较大功能模块时常常需要调用已经写好的页面, 对于某些诸如向导/步骤式的模块每次弹出页面是不太友好的, 因此我尝试将已有的页面嵌入新做的页面中.(事实上原工程中form2用groupbox做的向导页, 是form1嵌入form2中的某一标签页中实现向导切换)

以下为部分代码(由于项目保密, 在原工程上有删减),只列出实现效果的关键代码.

Form1:

unit F_Form1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, F_RatioBase, DB, RxMemDS, ComCtrls, Buttons, ExtCtrls, RzButton,StdCtrls;typeTFrmForm1 = class(TForm)btnOK: TRzBitBtn;btnCancel: TRzBitBtn;Panel1: TPanel;Panel2: TPanel;private{ Private declarations }FOwnerForm : TForm;procedure LocateData;override;procedure InitCoordinate; override;public{ Public declarations }//为了屏蔽父类的一个虚方法, 在子类中生成一个新的方法, 响应父窗体事件的关键constructor Create(AOwner: TComponent; OwnerForm: TForm ); reintroduce; end;
varFrmForm1:TFrmForm1;implementation{$R *.dfm}
//构造一个create函数将FOwnerForm 赋值
constructor TFrmForm1.Create(AOwner: TComponent; OwnerForm: TForm);
begininheritedCreate(Aowner);FOwnerForm := OwnerForm;
end;procedure TFrmForm1.FormCreate(Sender: TObject);
begininherited;//初始化
end;end.

Form2:

unit F_Form2;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, GridsEh, DBGridEh, RzTabs, Menus, DB, hsDbUnit, ToolWin,ComCtrls, RzBckgnd, RzPanel, RzButton, ExtCtrls, Contnrs, Math;
//省略部分
typeTFrmForm2 = class(TForm)BtnOK: TRzBitBtn;Panel1: TPanel;BtnCancel: TRzBitBtn;procedure FormCreate;privateprocedure ShowForm1;{ Private declarations }publicEditMode : string;{ Public declarations }end;varFrmForm2: TFrmForm2;
implementation
usesF_Form1;
{$R *.dfm}{界面创建销毁}
procedure TFrmForm2.FormCreate;
begininherited;Application.HintHidePause := 30000;//hint显示时间延长至最多30秒
end;procedure TFrmForm2.FormShow(Sender: TObject);
beginBtnOK.Visible := False;btnBack.Visible := False;btnNext.Visible := False;
end;procedure TFrmForm2.ShowForm1;
beginif Assigned(FrmForm1) thenExit;FrmForm1 := TFrmForm1.Create(Panel1,self);FrmForm1.WindowState := wsMaximized;FrmForm1.Parent := Panel1;FrmForm1.BorderStyle := bsNone;FrmForm1.Align := alClient;   //全部占满FrmForm1.btnOK.Visible := False;FrmForm1.btnCancel.Visible := False;//可参数传入传出FrmForm1.Show;
end;end.

必须要注意的是, 我在此项目中遇到由于本工程Form1继承自另一页面,导致其中有个dbgrid创建了却没有立即显示,页面显示完全后面再触发调用ShowForm1方法才能正常显示. 因此最好在formshow方法结束后,即页面完全显示以后动态创建.

[Delphi]将一个窗体Form1嵌入另一个窗体Form2相关推荐

  1. 在一个窗体中调用另一个窗体的控件或方法(C#)

    在一个窗体中调用另一个窗体的控件或方法 解决方案:从构造函数中传递参数(Form). 1.将Form1中的控件改成public属性 具体实现过程请参看一下代码(在form1的textbox1中输入然后 ...

  2. 如果关闭一个窗体后激活另一个窗体的事件或方法

    1 在被调用窗体(fmain)中将所要调用的方法设为public 2 修改调用窗体(f)的构造函数 private frmMain fmain; public fref(frmMain fMain) ...

  3. Winforn中怎样在窗体中打开另一个窗体

    场景 在Winform的窗体A中打开另一个窗体B. 实现 //打开新的窗体 CurveCompare cc = new CurveCompare(); cc.Show(); 效果 以上代码的实现参照: ...

  4. 一个程序通过窗体句柄控制另一个窗体

    接下来,我们来演示不同程序中,怎么通过窗体句柄控制其它程序窗体. 演示的例子是:控制系统的记事本窗体,先移动,再最大化,最后关闭 要求:桌面上有一个记事本,名称是:测试文本.txt - 记事本,保证是 ...

  5. c#中在一个窗体中触发另一个窗体的事件

    创建两个窗体,分别为form1,form2,在form1中添加控件textBox1和button1,创建一个form2的对象Form2 b = null; 在form2中添加button1,定义委托和 ...

  6. WinForm窗体中如何在一个窗体中取到另一个窗体的值

    例如我们定义两窗体,Form1和Form2,如何在Form2中取到Form1中的一个值呢? 解决方法1: 在Form1 中定义一个成员变量,例如public string a = " &qu ...

  7. C# WinForm只允许运行一个窗体实例

    大概看了看别人的方法,都是从语法的角度巧妙实现的. 我要实现的目的是dialogForm.Show(); 点击按钮显示对话框窗体,如果窗体没有关闭,再次点击,不重复显示. 我用了个笨方法,就是用一个静 ...

  8. access主窗体名词解释_ACCESS 父子窗体的语法介绍

    如果你在主窗体 如果你在子窗体 1 要参照一个窗体属性,例 如: RecordSource 在主窗体 Me.RecordSource Me.Parent.RecordSource 在子窗体 1 Me! ...

  9. 在Form1中打开另一个窗体Form2

    private void tsb_OpenForm2_Click(object sender, EventArgs e)         {            //设置Form2窗体实例只能是一个 ...

最新文章

  1. js 获得明天0点时间戳_Python 3+Django 3 结合Vue.js框架构建前后端分离Web开发平台实战...
  2. numpy中数组维度的理解
  3. geth rpc无法开启_三分了解以太坊 Geth 客户端快照加速机制
  4. 《信息学奥赛一本通》 高精除以低精。输入两个正整数,求它们的商(做整除)。
  5. 【需要重视的BUG】:偷权限的情况
  6. rpmbuild FILE
  7. ue默认高亮mysql_UE设置打开文件的默认高亮语言
  8. 线谱法 时钟分量的提取 matlab,LMD局域均值分解的matlab程序及示例
  9. App IM 之 环信
  10. Vue.js 2.6尝鲜
  11. 电脑安装linux后打不开win,安装完linux后 windows无法启动
  12. 单片机C51之1:流水灯
  13. PPT中的图像如何导出不失真的矢量图
  14. 新手怎么通过网络推广引流
  15. matlab实现图像处理教程,Matlab图像处理入门教程(菜鸟级)
  16. PHP内核剖析之FPM
  17. Ruby + Passenger 5 分钟 入门
  18. 了解汽车贷款全过程,不要掉进车贷“坑”!
  19. 随机,摇号、彩票,生成随机数或是随机字符串(万能的evaluate) 。如何找到随机中的规律
  20. 威斯康星麦迪逊计算机专业排名,威斯康星大学麦迪逊分校计算机排名2020年

热门文章

  1. 搜狗2017校园招聘笔试题
  2. 如何将一个Jsp网站打包发布(发布为War文件)
  3. 解决IE8的Sysfader错误问题
  4. php 常驻内存数据,EasyTask: PHP常驻内存定时任务定时器,(PHP resident memory timer, scheduled tasks)...
  5. ExoPlayer详解——高级主题(官方文档)
  6. java图片压缩方法(多种)
  7. (01)Unity 中使用 HDRP
  8. PHP的医院预约挂号系统
  9. Arduino 薄膜压力传感器 实验
  10. fabric-samples到底包含了哪些案例?