View Full Version : بازگشت از یک فرم عمومی به فرم قبلی
ariobarzan
جمعه 02 دی 1390, 21:46 عصر
سلام
من در برنامه یک فرم دارم که از هر فرم دیگری ممکنه به این فرم عمومی سویچ بشه
چه روشی هست که با بسته شدن یا خروج به همون فرم قبلی برگردیم ؟
توضیح بیشتر :
اگه فرم عمومی A باشه و ما فرمهای B C و D داشته باشیم
و از B به A رفتیم با بسته شدن A دوباره به B برگردیم و اگه
از D به A رفتیم با بسته شدن A دوباره به D برگردیم
ممنون
Felony
جمعه 02 دی 1390, 23:17 عصر
۱۰۰۰ تا کار میشه کرد , یکیش اینکه تعریف زیر رو در بخش Public فرم عمومیتون قرار بدید :
procedure Show(FormName: string);
و در بخش Private :
FName: string;
و به صورت زیر کد رویداد Show رو بنویسید :
procedure TForm1.Show(FormName: string);
begin
FName:= FormName;
inherited Show;
end;
و در رویداد بسته شدن فرم عمومیتون :
var
frm: Integer;
begin
for frm:= 0 to Application.ComponentCount - 1 do
if (Application.Components[frm] is TForm) and (TForm(Application.Components[frm]).Name = FName) then
TForm(Application.Components[frm]).Show;
حالا برای نمایش فرم عمومی باید نام فرم فعلی رو به پارامتر تابع Show بدید , مثلا :
Form1.Show(Self.Name);
Mask
شنبه 03 دی 1390, 13:00 عصر
فکر کنم با دستور form1.ShowModal مشکلشون حل بشه.
Felony
سه شنبه 06 دی 1390, 23:00 عصر
فکر کنم با دستور form1.ShowModal مشکلشون حل بشه.
چه ربطی داشت ؟!
Mask
چهارشنبه 07 دی 1390, 11:25 صبح
چه ربطی داشت ؟!
از نوشته های ایشون من حدس زدم منظورشون اینه که با بستن فرم جاری به همون فرمی که به فرم جاری رسیدن ،برگردند.
ariobarzan
چهارشنبه 07 دی 1390, 17:43 عصر
با سلام و تشکر از آقای تاجیک
متاسفانه من نتونستم روشی که شما لطف کردید و توضیح دادید را بکار ببرم چون چند تا پیام خطا داد
اگه امکان داره یه مثال کو چولو مثلا با دو سه تا فرم ساده و یک فرم عمومی ضمیمه فرمایید . ممنون از توجه شما
Anis131313
چهارشنبه 07 دی 1390, 21:45 عصر
سلام
سخنان جناب تاجیک درست هستش اما من امتحان نکردم، ساده ترین راه که من سالهاست ازش استفاده میکنم و هیچوقت پیگیر این نبودم که عوض کنم رو براتون بیان میکنم که شاید به دردتون بخوره. روش بدی نیست اما یه خورده زیاده کاری داره، روی تمامی فرم هایتان یک Lable قرار دهید و روی یک تکه کاغذ برای هر فرم شماره ای قرار دهید ف در واقع فرم هایتان را کدینگ کنید. بعد در این Lable قرار است عددی ذخیره شود که بیان کننده ی فرمی است که این فرم جاری را Call کرده و در رویداد OnClose این فرم جاری با یک دستور Case و از روی آن Lable تعیین میکنیم که پس از بسته شدن این فرم Focus به کدام فرم باید برگردد.
ببخشید.
Felony
چهارشنبه 07 دی 1390, 23:51 عصر
اصولی ترین راه همونی هست که بالا گفتم , اگر فرم ها Auto Create نیستن کار بهتر این هست که Constructor فرم رو Override کنید و اگر هم هدف پیاده سازی روش پست قبل باشه میشه از Tag خود فرم ها به حای گذاشتن لیبل استفاده کرد ولی در کل استفاده از Case برای این کار در یک برنامه بزرگ ( حتی کوچیک ) فنی نیست .
ariobarzan
پنج شنبه 08 دی 1390, 07:43 صبح
نظرتون راجع به اين روش چيه ؟
اول توي فرم اصلي برنامه يك متغير رو در بخش Public تعريف مي كنيم مثل LastForm:Tform;
بعد از هر فرمي كه ميخواهيم به فرم عمومي برويم اول مقدار اين متغير را با دستور MainForm.LastForm:=Self
مقدار دهي مي كنيم
حالا جهت خروج يا بستن فرم عمومي از دستور MainForm.LastForm.Show
استفاده مي كنيم كه در اصل برميگرده به فرم قبلي
من كه تست كردم جواب داد و بنظر نمياد مشكل خاصي باشه.
خوشحال ميشم نظر دوستان رو هم بدونم
ممنون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.