PDA

View Full Version : سوال: بسته شدن فرم در صورت ارور و باز شدن دوباره همان فرم



forodo
جمعه 19 دی 1393, 12:25 عصر
سلام
من می خوام وقتی که ارور داد ( داخل catch بررسی می کنم ) فرم بسته بشه و دوباره همون فرم باز بشه.
من خودم به فکرم رسید که توی قسمت catch یه متغیر استاتیک که توی یه کلاس تعریفش کردم رو مثلاً true کنم و در رویداد Active فرم قبلی بگم اگه true بود دوباره اون فرم رو show کن.
می خواستم ببینم راه دیگه ای داره؟ مثلاً مثل Application.restart() که برنامه رو می بنده و دوباره باز می کنه.
یعنی مثلاً form.? چی؟
با تشکر

forodo
پنج شنبه 25 دی 1393, 19:33 عصر
این کار نمی کنه.
private void frmLetterIn_FormClosing(object sender, FormClosingEventArgs e)
{
this.Refresh();
}

RIG000
پنج شنبه 25 دی 1393, 19:55 عصر
refform re = new refform(); this.Dispose();
re.ShowDialog();

RIG000
پنج شنبه 25 دی 1393, 19:58 عصر
تو catch بنویس نه تو form close evante

forodo
پنج شنبه 25 دی 1393, 20:08 عصر
من اینجوری نوشتم مشکل داره؟
یه متغیر static داخل یه کلاس Program تعریف کردم.
یه کلاس تعریف کردم و داخل کلاس اینو نوشتم:
public static void openFormAgain(Form form)
{
if (Program.formRefresh)
{
Program.formRefresh = false;
form.ShowDialog();
openFormAgain(form);
}
}
و در جایی که بازش می کنم هم اینو نوشتم:
if (Program.formRefresh)
{
clsFormOperation.openFormAgain(f);
}
اونی که شما زحمت کشیدید و قرار دادید کند عمل می کنه.
می خوام ببینم اگه این مشکلی نداشته باشه از همین که نوشتم استفاده کنم.

SabaSabouhi
پنج شنبه 25 دی 1393, 21:25 عصر
سلام
خیلی ساده هست. می‌تونی این کار رو تو کلاس خود فرم انجام بدی یا توی صدا کننده‌ی فرم.
من از تو خود کلاس فرم برات مثال می‌زنم.
1. تو کلاس فرم یک متد Static تعریف می‌کنی مثلاً به نام ShowMe.
2. توی این متد یه متغیر از جنس کلاس فرم می‌گیری و New و Show می‌کنی.
3. کل این قسمت رو توی یک Try-Catch قرار می‌دی.
4. Try-Catch رو هم توی یک حلقه بینهایت می‌اندازی.
5. آخرین خط Try هم خروج از حلقه باشه.

فرض کنیم که نام کلاس فرم MyForm باشه.



public static ShowMe(){
Form form;
while( true ){
try{
form = new MyForm();
form.ShowDialog();
break;
} catch {
form.Close();
}
}
}

حالا بجای New کردن و نمایش فرم، این متد Static رو فراخوانی کنید.

صبا صبوحی

forodo
پنج شنبه 25 دی 1393, 21:32 عصر
چه جوری از این استفاده کنم؟
متوجه نشدم اصلاً.

SabaSabouhi
پنج شنبه 25 دی 1393, 21:45 عصر
سلام
چه چیزی رو متوجه نشدی؟ بجای MyForm اسم کلاس فرمت رو بگذار. و این متد رو توی اون کلاس کپی کن.
وقتی این متد رو صدا بزنی، ( بجای کدی که الان وجود داره ) همین اتفاقی می‌افته که می‌خواستی.
یعنی با هر بار خطا دادن فرم، فرم بسته شده و دوباره باز می‌شه.

صبا صبوحی

RIG000
پنج شنبه 25 دی 1393, 23:42 عصر
الان این بعد بسته شدن چطوری مجدد اجرا میشه؟!
پس این چی بود نوشته بودی؟!!!!!



من می خوام وقتی که ارور داد ( داخل catch بررسی می کنم ) فرم بسته بشه و دوباره همون فرم باز بشه.


این کدیکه دوستمون نوشتن باز شدن فرمش تو قسمت try داره شکل میگیره!!!! شما مگه تو catch نمی خاست که فرمت اگه به catvh رسید مجدد همون فرمی که درونش هستی restart بشه؟؟؟

RIG000
پنج شنبه 25 دی 1393, 23:58 عصر
سلام
خیلی ساده هست. می‌تونی این کار رو تو کلاس خود فرم انجام بدی یا توی صدا کننده‌ی فرم.
من از تو خود کلاس فرم برات مثال می‌زنم.
1. تو کلاس فرم یک متد Static تعریف می‌کنی مثلاً به نام ShowMe.
2. توی این متد یه متغیر از جنس کلاس فرم می‌گیری و New و Show می‌کنی.
3. کل این قسمت رو توی یک Try-Catch قرار می‌دی.
4. Try-Catch رو هم توی یک حلقه بینهایت می‌اندازی.
5. آخرین خط Try هم خروج از حلقه باشه.

فرض کنیم که نام کلاس فرم MyForm باشه.



public static ShowMe(){
Form form;
while( true ){
try{
form = new MyForm();
form.ShowDialog();
break;
} catch {
form.Close();
}
}
}

حالا بجای New کردن و نمایش فرم، این متد Static رو فراخوانی کنید.

صبا صبوحی
شما این داستان استاتیک رو از پاس دهی مقدار استفاده میکنی. چرا موشک پرتاپ می کنید !!!!!!!!!!

private void button1_Click(object sender, EventArgs e)
{

try
{
int fool = Int32.Parse("RIG000" + 1);
// این ترای مشکل پیدا می کنه و میره کتچ رو اجرا کنه
}
catch
{
refform re = new refform();
this.Dispose();
re.ShowDialog();

}

}

M.KH-SH
جمعه 26 دی 1393, 01:17 صبح
میتونی یک event بسازی و اون رو در فرم اصلی بزاری که در اون نوشته شده باشه هر وقت فرم بسته شد دوباره بازش کنه.
و event رو هم در محل خطا فراخوانی کن تا مشکل حل بشه.

RIG000
جمعه 26 دی 1393, 10:11 صبح
اقا این کدی که من برات نوشتم برای mainform نیست برای Form2 هستش. یعنیشما برنامه رو اجرا میکنی میری فرم دو . یکباتون گذاشتم به اسم button1_Click که قرار هست دستوری رو برات انجام بده. اگه try برنامه isvalid بود دیگه برنامه به catch نمیره. اما شما catch رو میخای . پس کد بالایی که نوشتم خطا میده و میره به catch و تو catch من همین فرمی که توش هستی یعنی فرم 2 رو میبندم و بازش میکنم مجدد با همین کد بالا که تو catch نوشتم.
1- ایا شما همین بود سوالت ؟
2- ایا شما میخای رو فرم اصلی یعنی form1 یا همون mainfrom این catch اجرا شه و کاری که در form2 کردم رو تو main form میخاهید؟
3- سوال رو مجدد بپرسید اگه این 2 تای بالایی نبود.

forodo
جمعه 26 دی 1393, 12:45 عصر
ببینید دوستان گل
من یه دکمه در فرم A دارم که با کلیک بر روی اون فرم B باز می شه.
داخل فرم B من با تراکنش اطلاعاتی رو که کاربر پر کرده داخل بانک ذخیره می کنم.
حالا وقتی که کاربر دکمه ذخیره در فرم B رو زد در صورتی که اطلاعات به درستی ذخیره شد فرم بسته میشه.
حالا اگر به هر دلیلی ارتباط با بانک دچار مشکل شد اول اینکه RollBack تراکنش انجام میشه و اطلاعات کنترلها داخل یک Dictionary ریخته میشه و فرم B بسته بشه و مجدد دوباره فرم B باز بشه و اطلاعات داخل Dictionary داخل کنترلهای مربوطه ریخته بشه.


refform re = new refform(); this.Dispose();
re.ShowDialog();
این کدهایی که شما زحمت کشیدید و قرار دادید من تست کردم و کند بود. یعنی فرم با تأخیر بسته می شد ولی اونایی که خودم در پست 5 نوشتم خیلی سریع باز و بسته میشه.
حالا من نمی دونم اصولیش کدومه و کدوم بهتره. ولی از نظر سرعت برای من بهتر بود. شاید این سرعت مشکل داشته باشه. به همین دلیل پرسیدم که به نظر دوستان ممکنه که این به مشکل بخوره یا نه.

RIG000
جمعه 26 دی 1393, 16:05 عصر
کد که من گذاشتم یک میلیونیم ثانیه که داره اجرا مشه! تاخیر نداره که!

forodo
جمعه 26 دی 1393, 19:57 عصر
کد که من گذاشتم یک میلیونیم ثانیه که داره اجرا مشه! تاخیر نداره که!
منظورم از تأخیر نسبت به کدیه که گذاشتم.
کد شما یه مکث می کنه و بسته میشه و باز میشه ولی کد بنده اصلاً باز و بسته شدن رو حس نمی کنید.
به خاطر این سرعت بسته شدن و باز شدن پرسیدم شاید یه جای کار مشکل داره یا نه؟

RIG000
شنبه 27 دی 1393, 00:25 صبح
اقا فرقی نمیکنه اگه کد خودت جواب میگیره همنو بنویس. به جواب رسیدی دیگه. انقدر روش زوم نکن. :افسرده:

SabaSabouhi
شنبه 27 دی 1393, 08:18 صبح
سلام
یه پیش‌نهاد دارم، وقتی که کدت کار می‌کنه و مشکل سرعت داری. تغییر راه حل رو همیشه در نظر بگیر.
باشد راه حل درست این باشه که فرم بسته نشه، حطا رو کنترل کن و تو همون فرم کارهات رو انجام بده.
من از اول با دیدن این پرسش تعجب کردم که چه چیزی ممکن هست پیش بیاد که شما رو مجبور کنه
فرم رو بسته و دوباره باز کنی.

صبا صبوحی

forodo
شنبه 27 دی 1393, 08:30 صبح
اقا فرقی نمیکنه اگه کد خودت جواب میگیره همنو بنویس. به جواب رسیدی دیگه. انقدر روش زوم نکن. :افسرده:
آقا من که توی پست 5 عرض کردم اینجوری زدم درسته ولی اینجا مطرح کردم که دوستان ببینند و اگر مشکلی داشت بگند.

سلام
یه پیش‌نهاد دارم، وقتی که کدت کار می‌کنه و مشکل سرعت داری. تغییر راه حل رو همیشه در نظر بگیر.
باشد راه حل درست این باشه که فرم بسته نشه، حطا رو کنترل کن و تو همون فرم کارهات رو انجام بده.
من از اول با دیدن این پرسش تعجب کردم که چه چیزی ممکن هست پیش بیاد که شما رو مجبور کنه
فرم رو بسته و دوباره باز کنی.

صبا صبوحی
در بعضی مواقع نمی دونم چرا اروره بانک اطلاعاتی میده و هرکاری می کنم درست نمی شه ولی وقتی فرم رو می بندم و دوباره باز می کنم درست میشه. به همین دلیل مجبور شدم این کار رو بکنم.

RIG000
شنبه 27 دی 1393, 14:23 عصر
برادر اینکه شما داری از ارور فرار میکنی خوب نیست. گفتم چرا تو catch مینویسی!! . چه خطایی بانک میده ارورش رو بذار تاببینیم. اینجوری اگه قرار باشه تو ر برنامت مشکل داشته باشی که باید مدیریت خطا هات بشه بزو بسته کردن فرم.. ...گاحتمال خطای شما هم فکر میکنم بانکت باز میمونه و بسته نمیشه تو CATCH و مجبور میشی برنامه رو ببندی . یه حدس بود

forodo
شنبه 27 دی 1393, 22:54 عصر
برادر اینکه شما داری از ارور فرار میکنی خوب نیست. گفتم چرا تو catch مینویسی!! . چه خطایی بانک میده ارورش رو بذار تاببینیم. اینجوری اگه قرار باشه تو ر برنامت مشکل داشته باشی که باید مدیریت خطا هات بشه بزو بسته کردن فرم.. ...گاحتمال خطای شما هم فکر میکنم بانکت باز میمونه و بسته نمیشه تو CATCH و مجبور میشی برنامه رو ببندی . یه حدس بود
الان که فکر می کنم می بینم پر بیراه نمی گیا. :گیج:
احتمالش خیلی زیاده.
مشکل اینه که نمی تونم به ارور دسترسی ندارم.
شاید بعضی جاها یادم رفته finally رو بذارم.
دمت گرم.

RIG000
یک شنبه 28 دی 1393, 10:32 صبح
اگه try و catch رو برداری و همینجوری کد هات رو بذاری به خطا میرسی. :)