回 帖 发 新 帖 刷新版面

主题:[讨论]多窗体的问题

我编了一个多窗体的例子 但是,字窗体只能显示一次,
着怎么解决啊
procedure TFormmain.ToolButton1Click(Sender: TObject);
var i:Integer;
begin
for i := 0 to MDIChildCount - 1 do
begin
   if (MDIChildren[i] is TFormCheck) then
   begin
      (MDIChildren[i] as TFormCheck).WindowState := wsMaximized;
      (MDIChildren[i] as TFormCheck).Show;
       exit;  //强制退出过程

   end;
end;
FormCheck := TFormCheck.create(nil);  //建立子窗体
FormCheck.WindowState := wsMaximized;
StatusBar1.Panels[1].Text :='考勤登记';
end;

回复列表 (共4个回复)

沙发

多文档界面的编程较复杂,如果你还没具备面向对象的编程思想,建议不要往多文档界面想。简单说吧,你首先得建一个MDI子窗体的抽象类,在抽象类中定义好用于与主窗体联系的各种抽象方法,再由该抽象类派生出各种不同的MDI子窗体类,由主窗体创建并管理这些MDI子窗体类的实例。

板凳

多文档和多窗口并不难,但:
1、先了解什么是多文档?像文字处理软件,如WORD、记事本、写字板等就是多文档,你要哪种?
2、多窗口?这就多了,如一般财务软件,属性设置窗口等都有多窗口,你要哪种?

3 楼

别把“多文档界面”与“多文档”搞混。“多文档界面”有明确的定义,已形成术语,简称MDI。一般象WORD,Excel等可以从主窗体的“窗口”菜单中进行文档切换的就叫“多文档界面”。从Office2000开始,MDI有了一些变化,主窗体被弱化,子窗体变得独立,并出现了任务栏按钮,但不管打开多少个WORD文档,在任务管理器中只看到一个WORD进程。记事本、写字板不是MDI界面的,虽然它们可以运行多个,但只能称为多实例(多进程)。实际上除了软件本身限制运行多个实例的之外,哪个软件都可以运行多个实例。什么是多文档?几个文档放在一起不就是多文档了吗?

4 楼

(1)你可以设一个布尔变量flag,当你想要的窗体建立时,它就为真,当它为假时才可以建立窗体,但是当窗体关闭时,别忘了,把flag的值设为假,要不然,你想再创立窗体时就不行了!
(2)或者用一个得到窗体是否创立的系统函数,来判断窗体是否创立,这个函数我也不知道是什么,不过有这个函数

所以我用的是第一个方法!若知道那个函数,把它写到这个帖上!

我来回复

您尚未登录,请登录后再回复。点此登录或注册