Delphi MDI程序 父窗体如何调用当前活动子窗体的函数/过程

一个MDI文本文件编辑器
打开了N个子窗体
子窗体的.pas文件有一些public的过程和函数
我想在父窗体调用当前活动的子窗体函数
我用Self.ActiveChildForm无法调用
直接frmEdit.xxxx运行出错
求大家指导,谢谢!

回复于: 2013-01-21 15:31:31

将子窗口的函数定义为类函数
calss function a(const s: string): Boolean;

有两种解决办法,一种就是上楼说的,定义成class function静态方法,第二种就是普通的方法:
Delphi/Pascal code

var
AForm : TForm;
begin
AForm := Self.ActiveMDIChild;
if AForm <> nil then
(AForm as TForm2).func(‘Hello‘);
end;

这两种方法都必须在MDI窗体中uses子窗体。

静态方法就一句话:
Delphi/Pascal code

TForm2.func2(1);

form2窗体两个被调方法
Delphi/Pascal code

TForm2 = class(TForm)
private
{ Private declarations }
public
function func(Astring : string) : Boolean;
class function func2(AInteger : Integer) : Boolean;
{ Public declarations }
end;

时间: 2024-11-08 16:04:59

Delphi MDI程序 父窗体如何调用当前活动子窗体的函数/过程的相关文章

父窗体与子窗体的右键菜单合并(子窗体最大化后)

1 private void 打开子窗体ToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 Form2 f = new Form2();//创建窗体对象 4 f.MdiParent = this;//设置父窗体属性 5 f.Show();//显示窗体 6 f.Resize += //为窗体添加事件 7 new EventHandler(f_Resize); 8 } 9 10 void f_Resize(object sender,

Delphi中实现MDI子窗体(转)

Delphi中实现MDI子窗体 用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容  ① 多文档窗体(MDI) MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一个典型例子.MDI体系中至少需要两种窗体,只能将其中之一设置为主窗体,其余窗体全部则全部为子窗体,主窗体负责子窗体的管理.切换等工作.自然,子窗体上承载的内容可各不相同.Tidy浏览器最终实现了三种不同的窗体:主窗体.浏览子窗体.源代码子窗体.  ② 设置窗体类型  我们通过窗体的FormStyle属性设置

单例模式——解决MDI子窗体实例化的问题

机房收费系统进行有一段时间了,但是始终有些历史遗留问题.比如,如何MDI子窗体如何显示在上层的问题和MDI子窗体实例化的问题. 对于如何显示在上层的问题,这次采用的还是SetParent函数,在模块里面添加: <span style="font-size:18px;"><span style="font-size:18px;"> '定义一个用来设置子窗体的函数 Declare Function SetParent Lib "user

【解惑】C#父窗体子窗体

这个问题我当时学的时候也困惑了好久,今天看见有人问就好好解释下吧~ [问]父窗体调用子窗体,怎么显示子窗体关闭父窗体? [答]在不牵扯到线程的情况下,主窗体是不能关闭的,一关闭程序就退出了,应该隐藏,提供两种方法: 最简单的方法: [父窗体中加]Form2 f2 = new Form2();f2.Show();this.Hide();[扩]因为主窗体只是隐藏,不是真正意义上的关闭  Application.Exit(); //应用退出————————————————————常用方法:(这个方法,

子窗体和父窗体双向传值——C#窗体传值方法总结

简介 在很多场景下,我们的程序需要完成窗体间的传值功能,有时候是父窗体→子窗体单向传值.子窗体→父窗体传值甚至是,也有时候我们需要父窗体?子窗体双向传值. 在本文中主要介绍一些能够实现双向传值的方法,能够双向传值的方法也能够实现单向传值. 本文的所有源码都可以在GitHub上下载. 本文介绍的方法仅限于我自己知道并且实现过的,我相信还有很多我并不知道的方法,因此也许在很多朋友眼中本文的内容是浅显甚至可笑的,希望路过的各方朋友不吝赐教,我也希望不断地进步! 方法1:Public字段+ShowDia

C#父、子窗体间传值等

这是老生常谈的一个问题,百度上太多方法了,对错先不说.只想介绍最简单.明了的方法 这里介绍两种方法: 1.无参 2.有参 前提: 1.不管什么方法,窗体间传值,要被调用 的方法.控件.函数等等,修饰符都要先设置为Public 2.新建父.子两个窗体 主窗体 Main: 子窗体 Child: 一,无参(大部分人喜欢用这种) 只介绍一点:Owner属性,VS的解释:获取或者设置拥有此窗体的窗体   ,换种通俗的说法,说明它支持读取和修改. Main后台代码: namespace MainChild

C# WeifenLuo.WinFormsUI.Docking.dll 应用之问题集 子窗体访问父窗体方法

父窗体内容,需要在子窗体获取的方法为 CheckFormIsOpen private frmMenu frmMenu = new frmMenu(); public frmMain() { InitializeComponent(); } private void frmMain_Load(object sender, EventArgs e) { frmMenu.P_fm = this; frmMenu.Show(this.dockPanelMain); } public bool Check

关闭子窗体时刷新父窗体

父窗体:NoticeList.aspx:子窗体:NoticeInfo.aspx, 1.NoticeList.aspx中有按钮btnAdd,点击后弹出窗口NoticeInfo.aspx. 弹出窗体代码:1:新增弹出:javascript:window.open(NoticeInfo.aspx');: 2:编辑弹出:<a href=NoticeInfo.aspx?PID=<%#Eval("NewsID") %>' target="_blank">

window.open 打开子窗体,关闭全部的子窗体

需求:通过window.open方法打开了子窗体,当关闭主窗体时.子窗体应当也关闭. 实现思路: 1.打开子窗体函数window.open(url,winName)的第二个參数winName能够唯一标识打开的窗体.因此关闭子窗体仅仅须要使用winName.close()函数就可以. 2.一个页面可能有多个子窗体. 因此须要一个数组存储全部子窗体对象.关闭时,遍历数组就可以. 3.子窗体还能够再打开子窗体. 无限循环下去.因此须要推断. 此需求能够通过两个方法实现. 调用子窗体的关闭函数. 此方法