PDA

View Full Version : سوال: فاکتور گیری از اجرای یک رویداد



mhsmity
شنبه 15 بهمن 1390, 16:33 عصر
سلام
شی DataGridView داری رویدادی به اسم CellValueChanged می باشد.

هنگام اجری برنامه (ساخته شدن شی DataGridView) رویداد CellValueChanged چندین بار رخ می دهد.

اگه بخواهیم جلوی اجرای رویداد CellValueChanged فقط در هنگام ساخته شدن شی
بگیرم، باید چی کار کرد؟

mhsmity
دوشنبه 24 بهمن 1390, 00:14 صبح
سلام کسی نبود

cherchil_hra
دوشنبه 24 بهمن 1390, 07:33 صبح
شما می تونی event رو حذف و اضافه کنی
اول event مربوطه رو بنویس. بعد، از قسمت event مربوط به datatgridView اسمش رو حذف کن.

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{

}

توی فرم لود این کد رو اضافه کن
dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellVal ueChanged);

این کد میگه که برای ایونت CellValueChanged شی datatgridView این متد رو اجرا کن. می تونی چندتا متد بهش اضافه کنی که وقتی این اتفاق افتاد تمام اون متدها اجرا بشه. به شرط هم امضا بودن با DataGridViewCellEventHandler

اگه از منها استفاده کنی، این event از لیست event های datatgridView شما حذف میشه.
حالا اگه اسم event شما (dataGridView1_CellValueChanged) چیزه دیگه ای هست (به فرض CVChanged) همون اسم رو داخل DataGridViewCellEventHandler که Delegate هست میذاری. مهم امضا متد شما هست که باید با DataGridViewCellEventHandler همخونی داشته باشه

امضا متد شما اینجوریه (object sender, DataGridViewCellEventArgs e)

تعداد پارامترها و نوع آنها باید با DataGridViewCellEventHandler یکی باشه

موفق باشی

gwbasic
دوشنبه 24 بهمن 1390, 07:52 صبح
هیچ وقت نمی توان جلوی رخ دادن رویدادها رو گرفت. شما ابتدا باید رویداد مورد نظر رو درست شناسایی کنید ممکن است رویداد دیگری مناسب نیاز شما باشد. و در نهایت بازهم اگر نیاز داشتید در شرایطی کدی رو که پشت رویداد بنویسید خودتان این عمل رو باید هندل کنید. به فرض شما نمی خواهید که کدی که نوشتید هنگام Load فرم نمایش داده شود یک راه می تونه این باشه که یک پراپرتی به نام StartUp در سطح فرم از جنس bool تعریف کنید و در سازنده فرم آنرا مقدار true بدهید و در انتهای رویداد Load فرم یا Shown مقدار آنرا false کنید و در رویداد مربوطه قبل ار هر کاری مقدار StartUp را چک کنید و بر اساس مقدار اون تصمیم گیری کنید که چه کدی اجرا شود یا نشود. راه دیگر این است که از ابتدا توسط Designer برای رویداد CellValueChanged متد رویدادگردانتون رو attach نکنید و بعد از مقدار دهی اولیه مثلا binding گرید اون رو attach کنید.
دقت کنید اینها همگی ترفند هستند موضوع اصلی عدم امکان جلوگیری از اتفاق افتادن رویداد و یا درست انتخاب کردن رویداد هست. در نهایت اگر با مشکل مواجه شدید می تونید از روشهای مختلف که دو مورد رو مثال زدم متناسب با نیاز خودتون استفاده کنید.

shadi khanum
دوشنبه 24 بهمن 1390, 11:30 صبح
خیلی ساده.. یه متغیر boolean سراسری تو فرمت تعریف کن مثلا به اسم Loaddone و مقدارپیش فرض بهش false بده. بعد ته formLoad مقدارش رو true کن و توی رویداد CellValuechange، همه کدهات رو توی یه if بذار که اگه loadDone مساوی true بود کدهات اجرا بشه..
موفق باشی