PDA

View Full Version : سوال: متدی به جای متد frm.show



rostamkhani
شنبه 30 شهریور 1387, 23:03 عصر
سلام
دوستان آیا آمکان هست که به جای متدی مثلا متد Show تابعی جایگزین کرد
و در هر جای برنامه که مینویسم frm.show تابعی دلخواه و دستورات مد نظر اجرا بشه .
با تشکر

bachebahal_1363
شنبه 30 شهریور 1387, 23:13 عصر
سوالت یکمی مبهمه
اگر می خوای تابعی بنویسی ، خوب هر تابعی با هر متد دلخواه و هر اسم دلخواه می تونی بنویسی و محدودیتی در استفاده و الباقی موارد نیست .
اگر می خوای متد Show فرم رو تغییر بدی فکر نمی کنم امکان پذیر باشه البته من اطلاعی ندارم شاید بشه .

jaza_sa
شنبه 30 شهریور 1387, 23:31 عصر
اگر منظورتون تغیر متد show() هست میتونید این تابع رو override کنید
به این صورت :


protected override void OnShown(EventArgs e)
{
// Your Code
}

rostamkhani
یک شنبه 31 شهریور 1387, 00:07 صبح
درسته ولی با override هم این تابع اجرا میشه و هم تابع اصلی این برنامه رو برای مثال نوشتم
که میخوام اگر متغیری False بود فرم اصلا باز نشه . ولی چون دستور Show اجرا میشه باید Hide کرد و بازو بسته شدن فرم و از این جور مسال .
البته این جور کارا با یک تابع کمکی حل میشه ولی مستلزم تغییر همه frm.show به مثلا frm.MySHow
اگر راهی دیگری هست ممنون میشم موفق باشین



protected override void OnShown(EventArgs e)
{
if (!okSHow)
{
this.Hide();
this.Close();
}
}

SMRAH1
یک شنبه 31 شهریور 1387, 00:30 صبح
همین فرآیند را درون Form_Load انجام بده به جای OnShown.
یک راه دیگر هم ایجاد یک تابع دیگر (مثلا MyShow است) و پیاده سازی کد مورد نظر که در صورت نیاز تابع Show رو فراخوانی کند.در این حالت باید در برنامه، هرجا می خواهی از Show استفاده کنی ،از MyShow استفاده کنی.

jaza_sa
یک شنبه 31 شهریور 1387, 10:19 صبح
تو این مثالی که گذاشتید ، میشه کارای دیگه ای هم کرد
مثلا قبل از اینکه فرم رو بخوایم بسازیم و اونرو نمایش بدیم شرط رو چک کنیم
یا اینکه در رویداد لود فرم دوم این کد رو بنویسیم :

private void Form2_Load(object sender, EventArgs e)
{
if (!okSHow)
this.Dispose();
}

سار
یک شنبه 31 شهریور 1387, 11:55 صبح
اگر مفهوم نبود یا سوالی بود در خدمتم

rostamkhani
یک شنبه 31 شهریور 1387, 15:49 عصر
خوب این برنامه که نوشتین همون مشکلی گفتم رو داره بازو بسته شدن و این مثال همون کدی که بنده گزاشتم با کمی تفاوت
از سوال خارج شدین بنده برنامه رو گزاشتم برای حالتی که نتوانیم تابع جایگزین بنویسیم مجبوریم مثلا از این کارا کنیم
سوال اصلی جایگزین کردن تابع به جای Show و تابع Show برای مثال گفتم.

SMRAH1
یک شنبه 31 شهریور 1387, 16:23 عصر
این برنامه این مورد را داره،به این دلیل که سناریوی زیر را دنبال می کند:
1) در Form_load مقدار canShow مقدار false می گیرد.
2) فرم نمایش داده می شود و پیغام OnShown ارسال می شود.
3) چنانچه CanShow مقدار flase دارد،فرم را مخفی می کند.

در واقع شما دو راه داریم:
1) قبل از فراخوانی Show مربوط به فرم (در شی فراخوان فرم)،وضعیت عدم نمایش را تست کنید و در صورت نیاز اصلا فرم را نمایش ندهید.
2) اگر فرم ،خودش باید تصمیم به نمایش بگیرد،در تابع Form_Load این عمل را انجام دهید (از نمایش فرم جلوگیری کنید، یا کلا آن را close کنید.این فرآیند می توان در تابع سازنده فرم ،حتی قبل از initComponent، انجام شود ).

rostamkhani
دوشنبه 01 مهر 1387, 14:24 عصر
سلام
دوست عزیز سناریوی که گفتین قبلا تست کردم امکان نداره و از لحاظ منطقی درسته نیست
ولی باز هم میگم شما دنبال یک راه حل برای show فرم هستین در صورتی که بنده این رو برای مثال گفتم و سوال اصلی روش جایگزین کردن تابعی برای تابعی از قبل نوشته شده و کامپایل شده است مثل تابع Show وگرنه اون کاری در مثال گفتم در صورت ممکن نبودن این مطلب با یک تابع کمکی دیگر مثل Myshow حل میشه . بنده میخوام بدونم راهی هست برای جایگزینی تابع یا باید تابع جدیدی نوشت .
متشکر

rostamkhani
چهارشنبه 03 مهر 1387, 16:51 عصر
سلام
دوستان هیچ راهی برای این موضوع در #C نیست مثلا یه چیزی شبیه به ExtensionMethods
با تشکر