在子窗體中,我增加了一個關閉按鈕close,其代碼如下:
procedure Tfrmaddgoods.btncloseClick(Sender: TObject);
begin
Close;
end;
窗體類型:fsMDIChild但是不能關閉,只能最小化,我查看了相關資料,好像只要close就行,如是hide就隱藏.本窗體代碼如下:
unit addgoods;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls;type
  Tfrmaddgoods = class(TForm)
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    articleid: TEdit;
    price: TEdit;
    number: TEdit;
    Label5: TLabel;
    btnok: TButton;
    btnclose: TButton;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Table1: TTable;
    stock: TLabel;
    procedure btnokClick(Sender: TObject);
    procedure btncloseClick(Sender: TObject);
    
  private
    { Private declarations }
  function ismoney(s:string):boolean;  //判斷S可否轉化成貨幣類型
  function isnumber(s:string):boolean;  //判斷S可否轉化成數值類型
  public
    { Public declarations }
  end;var
  frmaddgoods: Tfrmaddgoods;implementation{$R *.dfm}
function isnumeric(c:char):boolean;
begin
  result:=(ord(c)>47) and (ord(c)<58);
end;
//判斷S可否轉化為成貨幣類型:
function Tfrmaddgoods.ismoney(s:string):boolean;
var
  i:integer;
begin
   i:=1;
   if length(s)=0 then
     begin
     result:=false;
     exit;
   end;
   while i<=length(s) do
    begin
      if (isnumeric(s[i])=false) and (s[i]<>'.') then
        begin
          result:=false;
          exit;
        end;
        i:=i+1;
        end;
      result:=true;
    end;
//判斷S可否轉化為成數值類型:
function Tfrmaddgoods.isnumber(s:string):boolean;
var
  i:integer;
begin
   i:=1;
   if length(s)=0 then
     begin
     result:=false;
     exit;
   end;
   while i<=length(s) do
    begin
      if (isnumeric(s[i])=false) and (s[i]<>'.') then
        begin
          result:=false;
          exit;
        end;
        i:=i+1;
        end;
      result:=true;
    end;
procedure Tfrmaddgoods.btnokClick(Sender: TObject);
var
  canadd:boolean;
  i:integer;
begin
  canadd:=false; {能否增加商品的標志}
  if isnumber(articleid.Text)=false then
  begin
    messagedlg('"商品編號"輸入錯誤,請重試!',mtwarning,[mbok],0);
    activecontrol:=articleid;
    abort;
  end;
  try
  //檢查"商品編號",如果沒有這種商品則報錯:
  i:=strtoint(articleid.text);
  with table1 do
  begin
    first;
    while not eof do
    begin
     if fields.FieldByName('商品編號').Asinteger=i then
     begin
      canadd:=true;
      break;
     end;
    next;
  end;
end;
 if canadd=false then
 begin
   messagedlg('"商品編號"輸入錯誤,請重試!',mtwarning,[mbok],0);
   activecontrol:=articleid;
   abort;
 end;
 //檢查"單價",如果不是貨幣字符串則報錯:
 if ismoney(price.text)=false then
   begin
    messagedlg('"單價"輸入錯誤,請重試!',mtwarning,[mbok],0);
    activecontrol:=price;
    abort;
   end;
 //檢查"進貨數量",如果不是數值類型則報錯:
 if isnumber(number.text)=false then
  begin
    messagedlg('"進貨數量"輸入錯誤,請重試!',mtwarning,[mbok],0);
    activecontrol:=number;
    abort;
  end; //根據商品編號修改商品表項:
 with table1 do
  begin
    edit;
    if price.text<>'' then
      fieldvalues['單價']:=price.text;
      fieldvalues['存貨']:=fields.fieldbyname('存貨').AsInteger+strtoint(number.text);
      stock.Caption:=fields.fieldbyname('存貨').AsString;
      post;
    end;
  except
  on ex:econverterror do
   begin
     messagedlg('輸入錯誤,請重試!',mtwarning,[mbok],0);
     exit;
   end;
  end; {end of try}
  messagedlg('進貨成功!',mtwarning,[mbok],0);
  //一些請屏操作:
  articleid.text:='';
  price.text:='';
  number.Text:='';
  stock.Caption:='';
 end;procedure Tfrmaddgoods.btncloseClick(Sender: TObject);
begin
Close;
end;
end.

解决方案 »

  1.   

    procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;
      

  2.   

    procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;
    //MDI子窗体创建后想要关闭它就要将它释放掉
    要显示的时候重新创建
    所以跟你的其他代码没有关系
      

  3.   

    你在打开的时候: 
    if Tmdichild= nil then
    begin.......(code)
    end;
    procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
      Tmdichild=nil;//只能打开一次,否则能打开好多次 
    end;
      

  4.   

    procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
      Tmdichild=nil
    end
      

  5.   

    在ONCLOSE事件中
    ACTION := CAFREE
      

  6.   

    在子窗体的ONCLOSE事件中
    ACTION := Cafree
      

  7.   

    procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;
    可在closequery里
    加上if    *** then else  加上****
      

  8.   

    procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
      mdichild=nil
    end
      

  9.   

    procedure Tform.FormClose(Sender: TObject;var Action: TCloseAction);
    begin
      Action:=cafree;
    end;
      

  10.   

    例:
    打开时:procedure TMain_Form.EntryClick(Sender: TObject);
    begin
      if not Assigned(long_server_Form) then
         long_server_Form:=Tlong_server_Form.Create(Application);
      long_server_Form.Show;
    end;procedure Tlong_server_Form.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      action:=cafree;    //关闭时释放
    end;procedure Tlong_server_Form.FormDestroy(Sender: TObject);
    begin
    long_server_Form := nil;     //窗体名胜 := nil;
    end;
      

  11.   

    謝謝樓上所有兄弟!!!!
    procedure Tfrmaddgoods.btncloseClick(Sender: TObject);
    begin
    self.free;
    end;
    procedure Tform.FormClose(Sender: TObject;var Action: TCloseAction);
    begin
    Action:=cafree;
    end;
    按上面這種方式,其中有一個整個窗體不管怎麼樣,任可按都是灰色,不知原因在那兒?
    (注意我兩個窗體是這樣的,經過上面的方面以後,情況發生上面變化)
    另外我的MDI打開後,就出現上面那個灰度的窗體,之前打開MDI時,所有的子窗體都打,不知那位兄弟能幫忙指點!!!!