设计了一个MDI程序,在MainForm中有一ToolBar,希望在关闭所有的子窗口后,ToolBar上某些Button变为Disable,不知如何控制。

解决方案 »

  1.   

    MainForm.Toolbar1.ToolButton4.Enabled:=False;
      

  2.   

    是不是可以这样:
    if mdiform.child[0]=null
    button.visible=false;
      

  3.   

    设置一个全局变量,开始时为零,新建一个子窗体时就修改一下这个数,在每个子窗体关闭时判断,如果为0就MainForm.Toolbar1.ToolButton.Enabled:=False;
      

  4.   

    我在ChildForm.OnClose中进行了设置,在打开一个子窗口时,所要的功能是能够实现的,但当子窗口>1时,只要关闭其中一个,则Button变为Disable。
      

  5.   

    加上判断
    if MainForm.MDIChildCount>0 then
    ...
    else
    ...
      

  6.   

    我看还是最好用一下消息,也就是说,在子窗口关闭的时候,向主窗口发送一个自定义的消息。
    然后,主窗口判断一下自己的MDIChildCount属性,即可。
      

  7.   

    你可以在mdi窗口创建了的时候写disabled,在mid窗体free的时候写enable
      

  8.   

    我也遇到过,我是先让MAIN—FORM。formsystem:=normal.  onshow 事件里
    FSFORM,。
      

  9.   

    在子窗口关闭的时候,向主窗口发送一个自定义的消息。
    然后,主窗口判断一下自己的MDIChildCount属性,即可。
      

  10.   

    主窗体:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus;const
      WM_MDICHILDCLOSE = WM_USER + 1;type
      TMDIMain = class(TForm)
        MainMenu1: TMainMenu;
        File1: TMenuItem;
        New1: TMenuItem;
        Exit1: TMenuItem;
        nClose: TMenuItem;
        N1: TMenuItem;
        procedure New1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure WMMdiChildClose(var Msg:TMessage);message WM_MDICHILDCLOSE;
      end;var
      MDIMain: TMDIMain;implementationuses Unit2;{$R *.dfm}{ TMDIMain }
    { TMDIMain }procedure TMDIMain.WMMdiChildClose(var Msg: TMessage);
    begin
      if Self.MDIChildCount = 1 then
        nClose.Enabled:=False;
      inherited;
    end;procedure TMDIMain.New1Click(Sender: TObject);
    var
      frmMDIChild:TMDIChild;
    begin
      frmMDIChild:=TMDIChild.Create(Self);
      frmMDIChild.Show;
    end;end.
    子窗体:
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TMDIChild = class(TForm)
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      MDIChild: TMDIChild;implementationuses Unit1;{$R *.dfm}procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      SendMessage(MDIMain.Handle,WM_MDICHILDCLOSE,0,0);
      Action:=caFree;
    end;end.
      

  11.   

    给分吧。
    你创建一个MDI工程,在子窗体上建一个菜单,按上面说的,试一试!!