关于MDIForm问题

randee_luo 2010-02-27 12:02:07
有两个窗口,一个是MDI主窗口,里面放置了一个按扭,用来打个后一个窗口的.还有一个是MDI子窗口.
问题是: 为什么我每点一次按扭,Mdi子窗口打开了,,但是不会关闭. 点关闭按扭都关不了呢....是不是要在哪里设置设置呀??
...全文
115 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
randee_luo 2010-02-27
  • 打赏
  • 举报
回复
加后是有用,,但是就是按扭的问题还是没有解决嘞.. 还是会出现好多窗口
静远 2010-02-27
  • 打赏
  • 举报
回复
引用 2 楼 haochin 的回复:
要在子窗体的onclose事件中写:
Delphi(Pascal) code
Action:=caFree;


嗯,你把这个加进去看看。
randee_luo 2010-02-27
  • 打赏
  • 举报
回复
就是
var
form2:Tform2;
begin
form2:=Tform2.create(self);
form2.show;
end;
haochin 2010-02-27
  • 打赏
  • 举报
回复
引用楼主 jxlhc09 的回复:
  有两个窗口,一个是MDI主窗口,里面放置了一个按扭,用来打个后一个窗口的.还有一个是MDI子窗口.
  问题是:  为什么我每点一次按扭,Mdi子窗口打开了,,但是不会关闭.  点关闭按扭都关不了呢....是不是要在哪里设置设置呀??


要在子窗体的onclose事件中写:

Action:=caFree;
静远 2010-02-27
  • 打赏
  • 举报
回复
你的按钮点击事件是怎么写的?
randee_luo 2010-02-27
  • 打赏
  • 举报
回复
还真的出错了.....
randee_luo 2010-02-27
  • 打赏
  • 举报
回复
哦...那我现在就去试试
静远 2010-02-27
  • 打赏
  • 举报
回复
你手动关闭子窗口,然后再点击按钮试试?
可能会出现一些问题
randee_luo 2010-02-27
  • 打赏
  • 举报
回复
unit example4;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
open:Boolean=False;
implementation
uses Unit2;
{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
form2:Tform2;
begin
if open=true then
self.ActiveMDIChild.close;
form2:=Tform2.Create(Self);

Form2.Show;
open:=True;
end;

end.


可以了..呵..
静远 2010-02-27
  • 打赏
  • 举报
回复
我前面有个地方说错了,子窗口需要Close事件,要不就是最小化了。
randee_luo 2010-02-27
  • 打赏
  • 举报
回复
哦..不好意思...我错了..呵...谢谢.
Harryfin 2010-02-27
  • 打赏
  • 举报
回复
引用 13 楼 jxlhc09 的回复:
引用 10 楼 harryfin 的回复:
引用 5 楼 jxlhc09 的回复:加后是有用,,但是就是按扭的问题还是没有解决嘞..    还是会出现好多窗口
你不做窗口是否打开过的判断,当然就一直创建了。。。
  那为什么我不把它弄成MDI的窗口就不会发生这样的事呢.

这个和MDI不MDI无关,请理解类、对象实例的区别
静远 2010-02-27
  • 打赏
  • 举报
回复

uses Unit17;

procedure TForm18.Button1Click(Sender: TObject);
begin
if Self.ActiveMDIChild = Form17 then
Self.ActiveMDIChild.Close;
Form17 := TForm17.Create(Self);
Form17.Show;
end;
randee_luo 2010-02-27
  • 打赏
  • 举报
回复
引用 10 楼 harryfin 的回复:
引用 5 楼 jxlhc09 的回复:加后是有用,,但是就是按扭的问题还是没有解决嘞..    还是会出现好多窗口
你不做窗口是否打开过的判断,当然就一直创建了。。。

那为什么我不把它弄成MDI的窗口就不会发生这样的事呢.
randee_luo 2010-02-27
  • 打赏
  • 举报
回复
引用 11 楼 eriato 的回复:
你说的是不是想要点击按钮时打开一个新的child窗口并且关闭之前打开的Child窗口?

是这样的... 太聪明了. 看样子我的中文有待提高喔..呵.
静远 2010-02-27
  • 打赏
  • 举报
回复
你说的是不是想要点击按钮时打开一个新的child窗口并且关闭之前打开的Child窗口?
Harryfin 2010-02-27
  • 打赏
  • 举报
回复
引用 5 楼 jxlhc09 的回复:
加后是有用,,但是就是按扭的问题还是没有解决嘞..    还是会出现好多窗口

你不做窗口是否打开过的判断,当然就一直创建了。。。
randee_luo 2010-02-27
  • 打赏
  • 举报
回复
啊...不可能吧...你确定你设置他们为MDI了... 和我一样..我的会..你的不会....晕倒...
静远 2010-02-27
  • 打赏
  • 举报
回复

unit Unit18;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm18 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form18: TForm18;

implementation

{$R *.dfm}

uses Unit17;

procedure TForm18.Button1Click(Sender: TObject);
var
Form17: TForm17;
begin
Form17 := TForm17.Create(Self);
Form17.Show;
end;

end.

没有问题啊。Form17都没有加入FormClose事件也没有出现你前面说的无法关闭的问题。
randee_luo 2010-02-27
  • 打赏
  • 举报
回复
我就这么一点呐... 我只是做个实验..
加载更多回复(1)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧