将窗体从属于主窗体

几乎所有正式一点的C++ Builder程序除了主窗体外都还有从属窗体,有时是对话框,有时是无模式窗口。VCL使得创建和显示从属窗体都易如反掌。但不是所有程序都适于采用无模式窗体,有些程序需要在一个主窗体内显示不同的内容。本文讨论如何将一个从属窗体“寄居”于主窗体中,从属窗体看上去是主窗体的一部分,用户甚至不知道一个从窗体正被显示。图A显示了一个主窗体,其客户区是一个从窗体。

理解子/父联系

这类程序的基本思路是让所有从属窗体都作主窗体的子窗体,这种设计在其他框架(如OWL或MFC)中很常见,但在VCL程序中却不常见。VCL不允许简单地指定一下属性就使一个窗体从属于另一窗体,要做到这一点还得付出点小小的劳动。你得告诉Microsoft Windows从属窗体是主窗体的子对象,在C++ Builder编程中一般趋于认为窗体是窗口,元件是子对象,实际上从Windows的观点来看,窗体和元件都是窗口。可以将任一窗口

(窗体和元件)指定为另一窗口的子对象,只要你暂时跳出VCL圈子。

更好的“鼠夹”

将一个窗体附属于一个主窗体的一个好处是你可以象设计任何其他从属窗体一样设计子窗体,就是说你创建一个新的窗体,在其上添加元件并书写这个窗体的代码。这样使得设计你的子窗体变得容易,并将所有操纵子窗体的代码集中在一个地方。

程序设计范例

先给出一些程序的背景,程序名叫PARENTING,有一个主窗体,主窗体的顶部和底部各有一个工具条(Tool Bar)和状态条(Status bar),除主窗体外,还有两个子窗体,一个叫TTableForm,用栅格显示ANIMAL.DBF数据表,ANIMAL表是C++ Builder带的数据库样本的一个表。另一个子窗体TChartForm用Tchart显示ANIMAL表。(如果你购买的C++ Builder是标准版则没有数据库元件)你可以通过点击菜单项或工具按钮来选择显示表单还是图形窗体,在你作出选择时,活动窗体被摧毁而被选窗体被显示,子窗体在主窗体的工具条下方、状态条上方的客户区显示,而且随主窗体大小变动而随时保持充满客户区。

时间: 2024-09-07 12:44:58

将窗体从属于主窗体的相关文章

access数据库-子窗体记录在主窗体中同步(主窗体有文本框、组合框)

问题描述 子窗体记录在主窗体中同步(主窗体有文本框.组合框) 主窗体和子窗体为同一张数据表,实质就是在子窗体中点击任一条记录,主窗体中相应的文本框或组合框中能同步出现对应记录,便于编辑.本人刚接触ACCESS,请多指教,能给出相应参考代码更好!(用到的函数.事件过程及属性设置)

C#做了一个软键盘。想把值传入主窗体。让主窗体里面的textbox获得焦点

问题描述 C#做了一个软键盘.想把值传入主窗体.让主窗体里面的textbox获得焦点.而软键盘本身还能继续鼠标点击输入. 解决方案 解决方案二:委托啊,发消息啊解决方案三:楼上说的没错委托可以再就是窗体传值解决方案四:我要能用输入法的..中文.英文要都能输入的那种解决方案五:输入法不需要你处理,系统自己处理,上面已经说清楚了,用委托可以实现,或者构造函数.

MDI窗体程序中主窗体有N个子窗体,请问实例化问题?

问题描述 首先主窗体主要代码:privatevoidMenu_Click(objectsender,EventArgse){WinOperationClassP_Menu=newWinOperationClass();//声明对WinForm窗体进行操作的类对象P_Menu.ShowForm((ToolStripMenuItem)sender,this);//调用类中的方法,完成对窗体中ToolStripMenuItem控件相应项的操作}涉及到的类主要代码:winoperationclasspu

C#如何用子窗体实时显示主窗体中的一个参数?

问题描述 主窗体中有一个参数a,子窗体中有一个text,如何实现主窗体参数a的变化实时传递到子窗体中,并显示出来?我试过很多方法都只有在重新关闭并打开子窗体后,显示才会发生变化,既使用From2.Show(),后子窗体中的text才会更新显示.请大神们,提供一些代码,本人是新手. 解决方案 解决方案二:bind绑定技术解决方案三:http://bbs.csdn.net/topics/360140208解决方案四:引用2楼caozhy的回复: http://bbs.csdn.net/topics/

子窗体大小随主窗体中的panel控件大小而变化

问题描述 form1界面:panel2的dock=fillform2界面form1的load事件代码:Form2myForm=newForm2();myForm.TopLevel=false;panel2.Controls.Add(myForm);myForm.Show(); 程序启动时:form1窗体最大化时:现在需要实现form1窗体大小变化后,form2窗体大小也跟着变化,始终全部填充在form1的panel2控件中,并且form2的label控件处于在form2中的相对位置,不管form

【求助】,主窗体与子窗体问题激活问题

问题描述 线程和子窗体都是主窗体中定义的我在主窗体中创建了一个线程用来做显示一个子窗体这时主窗体正在加载数据子窗体显示正在加载中,当加载完成之后,自行关闭,并调用dispose销毁了可是这时主窗体自动最小化了,如何激活啊请各位高手作答 解决方案 解决方案二:子窗体this.mdiParent.windowstate=formwindowstate.normol;this.dispose;

delphi的Desktop主窗体介绍

启动Desktop有两种方法: (1)从Windows中启动 从Windows操作系统界面中,依次点击菜单项"开始l程序l Borland DelPhi6 I Database Desk.Top",就可启动DeskTop. (2)从Delphi中启动 从Delphi主菜单中单击"Tools I Database Desktop",也可启动DeskTop. 2.主窗体组成 Desktop窗体由标题栏.主菜单.工具栏.窗体工作区.状态栏5个部分组成. (1)主菜单 主菜

设置C#子窗体在主窗体中居中显示

问题的开始是由C#传传看主群里的印醒提出来的,下面我来说一下解决方案吧 其实表面上看是很简单的 开始吧,现在有两个窗体Form1主窗体,Form2子窗体 而且我相信大部分人都会这样写 在子窗体的Load事件中 这样写 this.StartPosition = FormStartPosition.CenterParent; 其实这样写是不对的,正确的写法应该是 this.StartPosition = FormStartPosition.CenterScreen; 为什么是CenterScreen

netbeans swing做的胖客户端程序如何控制主窗体的菜单

问题描述 netbeans swing做的胖客户端程序如何控制主窗体的菜单 不要问我为什么用netbeans的swing开发框架,这是领导决定的-- 小弟初用netbeans,却在最关键的地方卡壳了.netbeans开发swing程序如何授权啊. 或者说有哪位大神知道如何在程序中取到netbeans自动取到的那个主菜单值.帮小弟度过难关. 另外求问怎么做能让在登录界面确认后才生成主窗口. 解决方案 https://netbeans.org/kb/docs/java/quickstart-gui_