PDA

View Full Version : روش صدا زدن یه event در هر قسمت برنامه



smm2006sh
چهارشنبه 07 اردیبهشت 1390, 14:20 عصر
با سلام
البته اگه دباره سوالمونو پاک نمیکنند:قهقهه::قهقهه::قهقهه: :قهقهه:

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

Amir Oveisi
چهارشنبه 07 اردیبهشت 1390, 14:36 عصر
به جای این که دوباره form load رو فراخوانی کنید، بهتره که یک متد بنویسید که کار گرفتن عدد و +1 کردنش رو انجام بده و اون متد رو در form load فراخوانی کنید.
حالا وقتی هم که اطلاعات ذخیره شد و صفحه برای ذخیره بعدی آماده میشه، دوباره اون متد رو فراخوانی کنید تا همون کار رو انجام بده.

پ.ن:
نمیدونم چرا از این روش استفاده می کنید، اما اگر دلیل خاصی برای این کار ندارید توصیه می کنم به جای این کار یک فیلد در table مربوطه در database ایجاد کنید که auto increment باشه و بصورت اتوماتیک مقدارش برای هر رکورد افزایش پیدا کنه.

موفق باشید :)

mobtakercode
چهارشنبه 07 اردیبهشت 1390, 14:46 عصر
به نظر من اگر قرار است این برنامه در شبکه اجرا شود یا روزی قرار شد در شبکه اجرا شود آن وقت روش شما به مشکل برمی خورد یعنی گرفتن ماکسیمم عدد و اضافه کردن یکی به آن
پس بهتر است فیلد را identity کنید یعنی همانی که در پست بالا گفته شد

smm2006sh
چهارشنبه 07 اردیبهشت 1390, 14:54 عصر
اینجوری که شما میگید هم درسته اما بازم مشکل منو حل نمیکنه . میدونید چرا اخه ما یه بار به دیتابیس متصل میشیم و مقدار ماگزیموم primery key را میگیریم و بعد از اینکه دباره مقراری را درج کردیم فکر کنم همون مقدار قبلی را نشون بده ؟؟؟؟؟؟

m.soleimani
چهارشنبه 07 اردیبهشت 1390, 15:05 عصر
به فرض این که اسم فرم شما باشه Form1 توی رویداد کلیک یه کلید اینو بنویس مشکلت حل می‌شه موفق باشی./



this.Form1_Load(sender, e);

smm2006sh
چهارشنبه 07 اردیبهشت 1390, 15:33 عصر
یه سوال دیگه هم داشتم ؟؟
درمورد اعداد تصادفی هستش . سرچ هم زدن مطالبشون خوب بود اما به کارم نمیومد. ببینید من دارم (min , max0) جدول بانکم را داخل دوتا تکس باکس میریزم و به تابع رندوم میگم که از بین این دوتا عدد یه عدد به من بده ! که میده اما من میخوام تکرار نداشته باشه چون فرم قرعه کشی هستش و عدد اول را که داد کاربر خواست نفر بعدی را قرعه کشی کنه یکدفعه بین قبلی ها تکرار نشه

ممنون میشم کمک کنید:بوس:

m.soleimani
چهارشنبه 07 اردیبهشت 1390, 16:08 عصر
یه سوال دیگه هم داشتم ؟؟
درمورد اعداد تصادفی هستش . سرچ هم زدن مطالبشون خوب بود اما به کارم نمیومد. ببینید من دارم (min , max0) جدول بانکم را داخل دوتا تکس باکس میریزم و به تابع رندوم میگم که از بین این دوتا عدد یه عدد به من بده ! که میده اما من میخوام تکرار نداشته باشه چون فرم قرعه کشی هستش و عدد اول را که داد کاربر خواست نفر بعدی را قرعه کشی کنه یکدفعه بین قبلی ها تکرار نشه

ممنون میشم کمک کنید:بوس:

برای پرسش‌های تازه خودتون تاپیک تازه باز کنید تا برای جستجوی دوستان دیگه مشکل ایجاد نکنه و با قوانین هم مطابق باشه.

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

Amir Oveisi
پنج شنبه 08 اردیبهشت 1390, 09:46 صبح
به فرض این که اسم فرم شما باشه Form1 توی رویداد کلیک یه کلید اینو بنویس مشکلت حل می‌شه موفق باشی./



this.Form1_Load(sender, e);



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

m.soleimani
پنج شنبه 08 اردیبهشت 1390, 16:15 عصر
استفاده از این روش ممکنه کار شما رو راه بندازه اما صحیح نیست. دلیلی نداره وقتی به Event ای نیاز نداریم اون Event رو fire کنیم. لطفا فقط هدفتون اجرا شدن برنامه هاتون نباشه و به کد هایی که مینویسید و منطقی که استفاده می کنید هم فکر کنید.
موفق باشید

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

Amir Oveisi
پنج شنبه 08 اردیبهشت 1390, 16:42 عصر
هدفش اجرای ایونت form load نبود بلکه هدفش خوندن مقدار کلید و +1 کردن اون در زمان آماده شدن فرم برای ورود داده های جدید بود. بنابراین هیچ دلیلی برای فراخوانی دوباره اون وجود نداره. با این که در این روش هم متد فراخوانی می کنید و ایونت رو fire نمی کنید، اما باز هم توضیه نمیشه این کار رو انجام بدید چون که بر خلاف اصول برنامه نویسی هست.
یک event handler فقط باید event handler باشه و نباید ازش در جای دیگری استفاده کرد. هر چند این کار ممکنه تاثیری بر روند اجرای برنامه نداشته باشه، اما علاوه بر اینکه خوانایی برنامه رو بسیار کاهش میده، ساختار و منطق کد رو هم خراب می کنه و ممکنه حتی گاهی اوقات در بعضی شرایط روند اجرای برنامه رو هم مختل کنه.

لطفا به جای اینکه به دوستانتون ماهی بدید، ماهیگیری یاد بدید (البته ماهیگیری به شیوه صحیح)
موفق باشید :)