我的MDI的主窗体的左边有一个Treeview,通过点击它的节点来调用三个子窗体。现在的问题是:
1、连续点击某个节点几次,对应的窗体就会重复出现几次。而我要实现的效果是:当连续点击某个节点时,对应的窗体只出现一次。(下面是我的代码)主窗体中:
procedure TMainForm.TreeView1Change(Sender: TObject; Node: TTreeNode);begin
if treeview1.Selected=nil then exit;
if treeview1.Selected.Text='工程概况' then
TgcgkForm.create(self);
if treeview1.Selected.Text='招标工程登记表' then
TZbdjForm.create(self);
if treeview1.Selected.Text='投标邀请书' then
TTbyqsForm.create(self);
end;
而工程概况窗体:
procedure TGcgkForm.FormCreate(Sender: TObject);
begin
Table1.Open;
if Table1.IsEmpty then
begin
Table1.Append;
Table1.Post;
end;
end;
其中表Table已连接好数据库了。别的窗体的OnCreate事件大同小异,这里就不多说了。
2、怎样解决子窗体出现时的闪烁问题?即:子窗体出现时不是立即出现,而是运行、闪烁几秒钟,再最大化成理想状态。
3、当通过点击子窗体主菜单的“文件”→“退出”项喜欢关闭子窗体时,子窗体不是被关闭,而是变成设计时默认的大小了。这个怎样解决?
我在每个子窗体主菜单的“文件”→“退出”项的单击事件中写入:
procedure TGcgkForm.N10Click(Sender: TObject);
begin
close;
end;
1、连续点击某个节点几次,对应的窗体就会重复出现几次。而我要实现的效果是:当连续点击某个节点时,对应的窗体只出现一次。(下面是我的代码)主窗体中:
procedure TMainForm.TreeView1Change(Sender: TObject; Node: TTreeNode);begin
if treeview1.Selected=nil then exit;
if treeview1.Selected.Text='工程概况' then
TgcgkForm.create(self);
if treeview1.Selected.Text='招标工程登记表' then
TZbdjForm.create(self);
if treeview1.Selected.Text='投标邀请书' then
TTbyqsForm.create(self);
end;
而工程概况窗体:
procedure TGcgkForm.FormCreate(Sender: TObject);
begin
Table1.Open;
if Table1.IsEmpty then
begin
Table1.Append;
Table1.Post;
end;
end;
其中表Table已连接好数据库了。别的窗体的OnCreate事件大同小异,这里就不多说了。
2、怎样解决子窗体出现时的闪烁问题?即:子窗体出现时不是立即出现,而是运行、闪烁几秒钟,再最大化成理想状态。
3、当通过点击子窗体主菜单的“文件”→“退出”项喜欢关闭子窗体时,子窗体不是被关闭,而是变成设计时默认的大小了。这个怎样解决?
我在每个子窗体主菜单的“文件”→“退出”项的单击事件中写入:
procedure TGcgkForm.N10Click(Sender: TObject);
begin
close;
end;
解决方案 »
- 报表fastreport中一直没解决掉的问题,急
- DelPhi基础?如何让窗体的Image1随窗体的大小自动改变来适应窗体的大小?
- DbGridEh怎样实现小计功能?
- 个人用vb编写的控件为什么不能在delphi中使用!
- 如何让DBCOMBOBOX只能通过下拉菜单选值,而不能直接输入?谢谢
- 请关注http://www.csdn.net/expert/topic/837/837891.xml?temp=.7758753
- ComboBox2.Items.Assign(Screen.Fonts);可以读出字体到combobox2中,如果我想把字体的大小读入怎么做呢?
- 如何在一个事务中提交2个DataSet的修改
- 低手问题,很急,请看
- 大富翁的网址
- 如何从麦克风录音?
- 如何更改DbGrid中某一列的所有值,并且更新
TgcgkForm.create(self);
改成:
var
I: Integer;
if treeview1.Selected.Text='工程概况' then begin
for I := 0 to Screen.FormCount - 1 do begin
if Screen.Forms[I] is TgcgkForm then
Exit;
end;
TgcgkForm.create(self);
end;我建议,先写一个过程
function Tfrm_baseform.FindShowForm(FormClass: TFormClass; const Caption: string): TForm;
var
I: Integer;
begin
Result := nil;
for I := 0 to Screen.FormCount - 1 do begin
if Screen.Forms[I] is FormClass then
if (Caption = '') or (Caption = Screen.Forms[I].Caption) then begin
Result := Screen.Forms[I];
if (Result.WindowState = wsMinimized) then Result.WindowState := wsNormal;
Break;
end;
end;
if Result = nil then begin
Application.CreateForm(FormClass, Result);
end;
Result.Show;
end;
调用的时候:
procedure TMainForm.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
if treeview1.Selected=nil then exit;
if treeview1.Selected.Text='工程概况' then
FindShowForm(TgcgkForm,'');
if treeview1.Selected.Text='招标工程登记表' then
FindShowForm(TZbdjForm,'');
if treeview1.Selected.Text='投标邀请书' then
FindShowForm(TTbyqsForm,'');
end;
Create前判断下就是了
function Tfrm_baseform.FindShowForm(FormClass: TFormClass; const Caption: string): TForm;
写成
function TMainForm.FindShowForm(FormClass: TFormClass; const Caption: string): TForm;
但您又说:“TMainForm也是继承Tfrm_baseform的”,我不太理解这句话的含义。我带上主窗体一共是四个窗体呀:MainForm 、GcgkForm、 ZbdjForm 、TbyqsForm。是不是还得要再添加一个窗体frm_baseform呀?到底是该怎样的呀?
procedure TGcgkForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action:=caFree;end;
1.在节点操作的时候,判断一下, 如
if gcgkForm = nil then
gcgkForm := TgcgkForm.Create(application);
gcgkForm.Show;这样就不会出现重复的问题
2.在Form的子窗体OnClose事件写
Action := Cafree;
gcgkForm := nil;
两位对第三个问题理解错了。我是要在每个子窗体中主菜单的“文件”→“退出”项的单击事件中写代码的,不是要在子窗体OnClose事件中写的。 我也知道在MDI结构中,关闭一个窗体只是把它最小化了。要让一个窗体消失,只有在子窗体的OnClose事件中设置:Action := Cafree; 但在菜单的单击事件中怎样写呢?
哥(姐),你误会我了,我是怕没人回复我的帖子,才在题目的后面加上“(别认为很简单,能做出效果才是高手!)”的! 我认为搞计算机的没有笨与不笨之说,只有先知道和后知道之谈。 小弟是今年刚毕业的学生,工作经验是欠缺些,但我认为时间会证明一切的。如果基础或起步一样,经过相同的一段时间后,别人都做出来了,您没做出来,那才叫笨!
好了,不计较你说我笨了。这是技术论坛,不是人身攻击的地方!
不过我还得感谢您,您让我认识到:我今后发帖子的时候应该谦虚一些!言归正传,第一个问题我已经解决了。第二个问题——2、怎样解决子窗体出现时的闪烁问题?即:子窗体出现时不是立即出现,而是运行、闪烁几秒钟,再最大化成理想状态。
还没有解决,不知道哪位老师或师傅还能对无知的小弟指点一二?!当然,想要分的话,只管说!
TO czx0514(czx0514) :“下三烂”,彼此彼此,是在说自己吧!
TO wnnnnnn6(谁说女子不能搞软件?!) :你主持公道,15分全给你!
好人啊!谢谢!!! 误会您了,小弟不会说话,请别介意!第三个问题我当然想解决,而且很想解决。
上面我的表述不太准确,第三个问题应为:“当通过点击子窗体主菜单的“文件”→“退出”菜单项来关闭该菜单项所在的子窗体时,该子窗体可以被关闭,但其他两个子窗体却变成设计时默认的大小了,不是最大化显示了。而我想要的结果是关闭一个子窗体,其他两个子窗体呈最大化显示。这个怎样解决?”