请问子窗口关闭的有关问题~

请教子窗口关闭的问题~~
1:
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeAndNil(form3);
end;

我还想弄一个button关闭

procedure TForm3.btn4Click(Sender: TObject);
begin
  Close; //freeandnil(form3); 这两种都是内存错误
end;

请问为什么呢?

2:
如果我想
procedure TForm3.btn4Click(Sender: TObject);
var 
  str :string;
begin
  str := 'canone';
  formclose(sender,str)//直接代过程,第二个参数是个集合,请问应该怎么表示啊?试了好多方法[canone]都不行
end;

------解决方案--------------------
探讨
FormClose

Action := acFree;
self := nil;