导航
  • 主页
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

MDI子窗体如何实现ShowModal??为什么MDI子窗体调用ShowModal失败!!!请进帮忙!!

喜欢编程朋友 2005-07-14 11:36:24
如何在MDI窗体下面实现子窗体的showmodal的效果,因为如果调用子窗体的showmodal就会显示出错,这是什么原因???请高手帮忙解决!!多谢了!!!!
...全文
196 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
天行归来 2006-06-08
无意间也碰到此问题,此问题是可以解决的,虽此帖已结账,还是想贴出来,希望能给让后来者提供参考。
说明:FormStyle 为 MDIChild 对象窗口本身的确是不可ShowModal,所以我们需要在窗体创建之后作一些处理,步骤如下:
1、设计时,设置窗体的 FormStyle=fsNormal,同时设置 Visible=FALSE。
2、重载你的窗口的Create构造函数,并作一下处理。
constructor Create(AOwner: TComponent; OwnerStyle: TFormStyle); reintroduce; virtual;

constructor TXXForm.Create(AOwner: TComponent; OwnerStyle: TFormStyle);
begin
inherited Create(self);
FormStyle := OwnerStyle;
Visible := OwnerStyle=fsMDIChild;
end;

xxForm.Create(self,fsNormal)
xxForm.ShowModal;
xxForm.Free;

if xxForm=nil then xxForm.Create(self,fsMDIChild);
xxForm.Show;
回复
conis 2005-09-16
解决方案
1.将子窗口(SubForm)FormStyle设置为fsNormal,并将Visable设置为False
2.在Mdi窗口的事件中写如下代码:
var
SubForm: TSubForm;
begin
SubForm := TSubForm.Create(nil);
SubForm.ShowModal;
end;

问题可以得到解决
如果子窗口本身为MDIChild,创建后将FormStyle设置为fsNormal,应该可以解决问题,但我没有试过,只是理论上可行
回复
xx_adam 2005-07-14
MDI本来就是要求同时能显示多窗口,而用了showmodal只能显示一个窗口,那不是矛盾吗?
回复
seekmydoom 2005-07-14
因为如果调用普通子窗体的showmodal不会错的,showmodal的窗体不能是字窗体类型
回复
wlbfeihu 2005-07-14
有事能行的话就不是MDI了
就是SDI了
回复
wzg1031 2005-07-14
MDI窗体中不能showmodal
回复
发动态
发帖子
Delphi
创建于2007-08-02

4807

社区成员

Delphi 开发及应用
申请成为版主
社区公告
暂无公告