Merhaba...
... Fakat mesala 5 form olusturuldugu zaman bunlardan ilk formu kapattigimda tüm formlar kapaniyor. (5 i birden) . son olusturulandan geriye dogru kapatirsam sorun yok.
Ben istiyorumki hangi form kapatilirsa sadece o form kapansin.
-
AnaForm isimli bir formun var diyelim... Bu ana formdan oluşturacağın her form birbirinden bağımsızdır. Yani ilk oluşturduğun ile son oluşturduğun bağımsız birer formdur. Eğer sen her oluşturduğun form içerisinden bir fonksiyon ile o kendinden türetiyorsan karşılaştığın sorunsala neden oluyorsun demektir.
- Form oluşturma eylemini her defasından AnaForm yapıyorsa bu sorunsalla karşılaşmazsın.
Örnek : iki button bulunur. Birincisi ile form oluşturursun, ikincisi ile verdiğin numaralı formu yok edersin. İkinci buton yerine ilgili butonun köşesindeki form kapatma [X] başlık butonuna da basabilirsin.
Kod: Tümünü seç
Var
xFormNumarasi : Integer=0;
procedure TForm1.YeniFormOlustur;
Var
xxx : TForm;
begin
Inc(xFormNumarasi);
xxx := TForm.Create(Self);
With xxx do
begin
Name := Format('Form_%.3d', [xFormNumarasi]);
Caption := Name;
Width := 200;
Height := 100;
Visible := True;
Left := xFormNumarasi*100;
Tag := xFormNumarasi;
end;
end;
Procedure TForm1.FormuYoket(FormNo:Integer);
Var
Sayac : Integer;
begin
Sayac := 0;
Repeat
If (Components[Sayac] is TForm)
then If TForm(Components[Sayac]).Tag = FormNo
then TForm(Components[Sayac]).Free;
Inc(Sayac);
Until (Sayac >= ComponentCount);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
YeniFormOlustur();
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FormuYoket(StrToInt(Trim(InputBox('FormYoket','FormNumarası',''))));
end;
- Dediğim gibi her yeni formu create etme işlevini AnaForm üstlenmesini sağlamalısın. Bu sayede ana form yani programın sonlanana kadar herhangi bir türetilmiş formu kapatma özgürlüğüne sahip olursun...