社区
Delphi
帖子详情
偶在作子窗体时候,用子窗体直接show出来好呢?还是构造一个窗口,再show出来呢?为什么?
chris2019
2002-04-12 11:29:56
tell me
...全文
40
8
打赏
收藏
偶在作子窗体时候,用子窗体直接show出来好呢?还是构造一个窗口,再show出来呢?为什么?
tell me
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kangyinglai
2002-04-12
打赏
举报
回复
当然是后者,使用前一种方法,是在项目初始化的时候就建立了该Form,如果子FORM太多,占用太多系统资源。手工创建,可以在需要的时候创建,节省不少资源,会使你的程序启动更快
delphi0302
2002-04-12
打赏
举报
回复
zx_wang(wzx)说的对,在关闭时调用free方法就行了
zx_wang
2002-04-12
打赏
举报
回复
用Create方法,
但是在Close中需加
Procedure TChildForm.FormClose(Sender: TObject; Action: TAction);
begin
Action := caFree;
end;
wolfAone
2002-04-12
打赏
举报
回复
MDI窗体Create之前要判断是否已经Create,避免重复Create。建议ShowModal省略这个问题。
CeleronII
2002-04-12
打赏
举报
回复
你在设计MDI程序的时候,子窗体不需要SHOW的,直接CREATE就可以了
zx_wang
2002-04-12
打赏
举报
回复
Sorry
应该是
菜单File->New->Other->Project1(你的应该项目)
选择inhert
zx_wang
2002-04-12
打赏
举报
回复
菜单File->New->Other->Forms
选择inhert
OK
chris2019
2002-04-12
打赏
举报
回复
如何构造一个窗口呢?
偶是说已经有窗体了,只需要继承一下,再show出来,
偶不知道怎么做,请举例
在单文档程序中动态切换多个
窗体
的源码程序
摘要:本文通过
一个
程序实例描述了在VC++6.0下如何在单文档程序中通过菜单动态控制多 个
窗体
的切换。 一、 引言 我们在编制程序中根据需求的不同会在程序风格上选择多文档、单文档或是对话框模式 ,对于单文档模式可能是我们使用比较多的,但有时我们想采用单文档的形式显示多个不同 的
窗体
,如作为数据库前台应用程序就会遇到此类问题,数据库由大量的表单组成,而同常
一个
窗体
内只用来显示
一个
表单,所以要显示其他的表单时就要用到切换
窗体
的技术了,下 面就通过
一个
程序说明该技术的实现方法。 二、 实现技术 新建
一个
基于CFormView的单文档应用程序,再添加
一个
窗体
和与之对应的基于 CFormView的新视类,然后通过在主框架类里添加控制代码和菜单控制实现这两个
窗体
的动态 切换,下面就是具体的实现过程: (一) 用"MFC AppWizard(exe)"建立
一个
新项目"SwitchForm",并在第二步的创建类型上选 择为"Single documnet"单文档模式,第三、四、五、六步均取确省状态,最后一步选择 "CFormView"作为视类的基类。点按"完成"按钮,生成了初始工程"SwitchForm"。 (二) 点选菜单"Insert"、"Resource…",在弹出的"Insert Resource"对话框中"Dialog"树 里的"IDD_FORMVIEW",点击"New"按钮,生成了
一个
新的
窗体
,将其ID号改为"IDD_NEXTFORM"。 在原有的
窗体
上加
一个
静态框"这是第
一个
窗体
";在新建的
窗体
上也添加
一个
静态框"这是第二 个
窗体
"。 (三) 在菜单资源的"IDR_MAINFRAME"上添加一级菜单"
窗体
切换",及其二级菜单"第
一个
窗 体"、"第二个
窗体
",其标识号分别为"ID_FIRSTFORM"和"ID_SECONDFORM"。修该"第
一个
窗体
" 的属性为"Checked",表明程序初始时显示的是第
一个
窗体
。 (四) 在"ClassView"属性页里的"SwitchForm classes"上右键,在弹出菜单上选择 "New Class…",弹出"New Class"对话框,选择"Dialog ID:"为我们刚添加的新
窗体
"IDD_NEXTFORM",选择"Base class:"为"CFormView",类名取为"CNextFormView",这样就把第 二个
窗体
对应的视图类添加到了工程。 (五) 在框架类里添加函数SwitchToForm(): void CMainFrame::SwitchToForm(int nForm) { file://获取原来的活动
窗体
的视图句柄 CView* pOldActiveView = GetActiveView(); file://获取由"nForm"标识的
窗体
所对应的视图句柄 CView* pNewActiveView = (CView*) GetDlgItem(nForm); file://若视图句柄为空,则创建一新的。 if (pNewActiveView == NULL) { if (nForm == IDD_SW99vCHFORM_FORM) pNewActiveView = (CView*)new CSwitchFormView; if (nForm == IDD_NEXTFORM) pNewActiveView = (CView*)new CNextFormView; CCreateContext context; context.m_pCurrentDoc = pOldActiveView->GetDocument(); pNewActiveView->Create(NULL,NULL,0L, CFrameWnd::rectDefault, this,nForm,&context); pNewActiveView->OnInitialUpdate(); } file://选择pNewActiveView为活动
窗体
SetActiveView(pNewActiveView); file://显示活动
窗体
,隐藏非活动
窗体
pNewActiveView->ShowWindow(SW_SHOW); pOldActiveView->ShowWindow(SW_HIDE); int ID; if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CSwitchFormView)) ID=IDD_SW99vCHFORM_FORM; if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CNextFormView)) ID=IDD_NEXTFORM; file://设置
窗体
的ID号 pOldActiveView->SetDlgCtrlID(ID); pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout(); } (六)添加两个菜单相对应的命令响应函数和更新函数如下: void CMainFrame::OnFirstform() { file://通过IsKindOf函数确定当前活动
窗口
是否是第
一个
窗口
,如是,则无须切换, file://否则将通过SwitchToForm函数将当前活动
窗口
切换到"IDD_SW99vCHFORM_FORM" file://标识的第二个
窗体
。 if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView))) return; SwitchToForm(IDD_SW99vCHFORM_FORM); } void CMainFrame::OnUpdateFirstform(CCmdUI* pCmdUI) { file://通过IsKindOf函数判断当前活动
窗口
是否是第
一个
窗体
,如是则将其选中。 pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView))); } void CMainFrame::OnSecondform() { if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView))) return; SwitchToForm(IDD_NEXTFORM); } void CMainFrame::OnUpdateSecondform(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView))); } 然后再在该文件开始处添加对两个视图类的引用: #include "SwitchFormDoc.h" #include "SwitchFormView.h" #include "NextFormView.h" 在此须注意:应在两个视类的引用之前添加对文档类的引用,否则会引起编译错误。另外,由于视 类的
构造
函数在声明时都确省的声明为保护型的,在框架类中无法引用,所以还要将两个视类的类 声明改动如下: class CNextFormView : public CFormView { public: file://将protected 改为public. CNextFormView(); …… }; class CSwitchFormView : public CFormView { public: file://将protected 改为public. CSwitchFormView(); …… }; 三、 编译运行 编译运行程序,开始时的
窗体
上有"这是第
一个
窗体
的字样",菜单也只有"第
一个
窗体
"是被选中的, 当前的活动
窗体
是第
一个
窗体
;点击菜单"第二个
窗体
",视图中的
窗体
上的字样变成了"这是第二 个
窗体
",同时选中的菜单也由"第
一个
窗体
"变成了"第二个
窗体
",实现了通过菜单将
窗体
进行动态切换。 总结:此程序中关键的是SwitchToView函数,在此函数中,程序搜索所有当前文档的显示
窗口
来查找与CruntimeClass变量匹配的视图类。如果找到,该
窗口
被激活。通过与之类似的方法,还可以实现在多文档模式下的单档(文档)多视(视图),通过不同的视图以不同的方式显示来自同一份文档的数据,以更好的满足程序的需要。
Qt如何设置
窗口
屏幕居中显示以及设置大小
Qt如何设置
窗口
屏幕居中显示以及设置大小 设置
窗口
居中显示 方法一:在
窗口
(QWidget类及派生类)的
构造
函数中添加如下代码: #include //....... QDesktopWidget* desktop = QApplication::desktop(); // =qApp->desktop();也可以 move((desktop->width() - this->width())/2, (desktop->height() - this->height())/2); //....... 方法2:在调用show()函数后调用move()函数,j
wpf 主
窗体
调
用子
窗体
时报错System.InvalidOperationException: 只能在隐藏
窗口
上调用 ShowDialog
最近在做wpf的项目,发现了
一个
奇怪的问题,花了很长时间才解决,在此记录一下。 问题: 主
窗体
调
用子
窗体
使用的是ShowDialog(),有的子
窗体
可以正常调用,但是有的子
窗体
调用后会catch到异常:System.InvalidOperationException: 只能在隐藏
窗口
上调用 ShowDialog。 解决方法:经过深入分析后发现根本原因是子
窗体
中在
构造
函数中调用了this.show()。去掉this.show(),后在调用此子
窗体
不再报错。 ...
C#winform子
窗体
操作父
窗体
的方案
C#子
窗口
操作父
窗口
控件的方案 先在子
窗体
中定义
一个
父
窗体
的变量,接着重写
窗体
类无参变量
构造
函数,增加
一个
窗体
对象形参,然后把传入的形参赋值给最开始定义的父
窗体
变量。 接着在父窗在定义该子
窗体
的变量时把自己作为形参传入子
窗体
构造
函数中。 然后在子
窗体
需要用到父
窗体
某一控件的地方“抓”出该控件来,其格式有点像Android中使用某一控件做的捕获操作。 该示例为子
窗体
捕获父
窗体
中名为l...
创建子
窗体
,子
窗体
向父
窗体
传值,父
窗体
向子
窗体
传值
先解决父
窗体
向子
窗体
传值 ,呵呵,父
窗体
中创建子
窗体
时通过
构造
函数传值。 解决剩余的: 此处我们将使用Silverlight3来创建
一个
子
窗口
,我们要达到的目标包括: 1、子
窗口
从父
窗口
中获取信息并显示在子
窗口
的标题栏 2、设置当进入子
窗口
时取得焦点的控件 3、父
窗口
获取子
窗口
的相关信息包括按钮信息和文本输入框信息实现过程如下:首先新建项目SLChildWindow,在此项目中加入...
Delphi
5,386
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章