现在是用MDI来做窗口管理,效果见下图:我用的办法如下:
设定如下:
form1的formstyle设为:fsmdiform
form2的formstyle设为:fsmdichild下面是关键代码:
procedure TForm1.form21Click(Sender: TObject);
var
newform:Tform2;
i,flag:integer;
begin
  flag:=0;
  for i:=0 to form1.MDIChildCount do
 begin
// 通过对窗体的标题判断窗体是否存在
  if form1.MDIChildren[i].Caption='form2' then
   begin
   //如果窗体存在则恢复
     SendMessage(mdichildren[i].Handle, WM_SYSCOMMAND, SC_restore, 0);
     mdichildren[i].Show;
     mdichildren[i].Enabled:=true;
    //标识窗体已存在
     flag:=1;
   //退出循环
   break;
   end;
   end;
  //若窗体不存在,则创建
   if flag=0 then
 begin
 newform:=Tform2.Create(application);
 newform.Caption:='form2';
 //把form2的caption加到combobox1的text中
 combobox1.Items.Add('form2');
 end;
end;//点击combobox1选择后,如果存在窗口和combobox1的文本相同,就恢复窗口
procedure TForm1.ComboBox1Change(Sender: TObject);
var
newform:Tform2;
i,flag:integer;
begin
  flag:=0;
  for i:=0 to form1.MDIChildCount do
 begin
// 通过对combobox1.text判断窗体是否存在
  if combobox1.Text='form2' then
   begin
   //如果窗体存在则恢复
     SendMessage(mdichildren[i].Handle, WM_SYSCOMMAND, SC_restore, 0);
     mdichildren[i].Show;
     mdichildren[i].Enabled:=true;
    //标识窗体已存在
     flag:=1;
   //Í退出循环
   break;
   end;
   end;
end;现在的问题是,当form2.close时,combobox1.Items.Delete(integer)是一个整数:
如:combobox1.Items.Delete(2)删除的就是combobx.text下拉选择的第二行的文本。
只能通过取得combobox1.Itemsr的第二列的整数来删除,怎样取得像form3的integer我就不知道怎么做了。
希望大家帮我做个例子,谢谢!procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
form2:=nil;
combobox1.Items.Delete(?????);
end;
怎样确定form3的?????是第几个?

解决方案 »

  1.   

    //是删除当前的吗?
    ComboBox1.Items.Delete(ComboBox1.ItemIndex);
      

  2.   

    //把form2的caption加到combobox1的text中 
     //combobox1.Items.Add('form2'); 修改一下
      Combobox1.Items.AddObject('form2', NewForm);
     end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); 
    var
      i: Integer;
      AEvent: TNotifyEvent;
    begin 
      i := combobox1.items.IndexOfObject(Self);
      if i > -1 then
      begin 
        AEvent:=combobox1.OnChange;
        combobox1.onChange := nil;
        combobox1.items.Delete(i);
        combobox1.onChange := AEvent;
      end;
      action:=cafree; 
      form2:=nil; 
    end; 
      

  3.   

    谢谢blazingfire的回答,问题解决了!