باز کردن و بستن چند فرم با form.show
سلام
من همیشه فراری هستم از اینکه به کاربرم اجازه باز کردن چند فرم بدهم. اما الان مجبور شدم!!
فرض کنید من دو تا فرم با نامهای زیر دارم
Form1:Tform1
Form2:Tform2
می خواهم روی فرم اول یک کلید بگذارم که با زدن آن فرم دوم باز شود ولی به فرم اول هم دسترسی داشته باشد. ضنما فرم دوم Auto-Create نیست و موقع زدن کلید ساخته میشود.
یک همچین چیزی:
frm2:=Tform2.Create(self);
frm2.show;
تا اینجا که ساده بود. اما می خواهم اولا موقعی که فرم دوم بسته شد free شود و ضمنا موقعی که روی کلید زده میشود اگر فرم دوم قبلا ساخته شده بود دیگر کاری انجام ندهد.
البته در onClose فرم دوم Action:=caFree; را قرارداده ام که ظاهرا باید موقع بسته شدن فرم آن را آزاد کند.
همچنین در زمانی که کلید زده میشود با assigned چک میکنم:
if not Assigned(frmPM) then begin
frm1:=TForm1.Create(Self);
frm.Show;
end;
اما با این کد یک بار فرم دوم ساخته و نمایش داده میشود ولی اگر فرم بسته شد دیگر ساخته نمی شود و خروجی تابع Assigned همچنان true برمیگرداند!
نقل قول: باز کردن و بستن چند فرم با form.show
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
function FormExists(MyForm: TObject): boolean;
var i: Integer;
begin
Result := False;
for i := 0 to Application.ComponentCount-1 do
if Application.Components[i] = MyForm then begin
Result := True;
Break;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if FormExists(Form2) = False then
begin
try
Application.CreateForm(TForm2, Form2);
finally
Form2.Show;
end;
end;
end;
end.
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TForm2 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Destroy;
end;
end.
نقل قول: باز کردن و بستن چند فرم با form.show
با این روشهایی که دوستان گفتند مشکل اولیه ام حل می شود.
حال یک مشکل دیگر داریم:
اگر فرم اول یک فرم دیگر مثلا FORM1_1 را با ShowModule باز کند، تا این فرم بسته نشود، نه تنها فرم اول غیر فعال است (که ذات ShowModule همین است) بلکه فرم دوم هم تا FORM1_1 بسته نشود غیر فعال می ماند. من میخواهم فرم 1 و فرم 2 مستقل باشد:گریه:
نقل قول: باز کردن و بستن چند فرم با form.show
نقل قول:
نوشته شده توسط
masoode
با این روشهایی که دوستان گفتند مشکل اولیه ام حل می شود.
حال یک مشکل دیگر داریم:
اگر فرم اول یک فرم دیگر مثلا FORM1_1 را با ShowModule باز کند، تا این فرم بسته نشود، نه تنها فرم اول غیر فعال است (که ذات ShowModule همین است) بلکه فرم دوم هم تا FORM1_1 بسته نشود غیر فعال می ماند. من میخواهم فرم 1 و فرم 2 مستقل باشد:گریه:
خوب با ShowModule نشون نده از Show استفاده کن که این مشکل ر و نداشته باشی
نقل قول: باز کردن و بستن چند فرم با form.show
در سطح یک اپلیکیشن، نمی تونید بیش از یک شومودال اکتیو داشته باشید، آخرین مودال همیشه روی کل پروژه مودال است، چنانچه رفتار دیگه ای مد نظره، باید خودتون در سطج مستر فرم پیادش کنید.