PDA

View Full Version : EventHandler



سمانه علوی فر
یک شنبه 18 اردیبهشت 1390, 10:22 صبح
فرض کنید یک آبجکت از یک فرم ساخته ایم
می خواهیم برای دکمه ok این فرم یک تابع تعریف کنیم
فرض کنید برحسب اینکه کجا فرم را صدا می زنیم تابعی جدید به آن نسبت می دهیم
با توجه به تعاریف deligate هنگام هر بار صدا زدن فرم و کلیک دکمه ok تمام توابع تعریف شده برای آن اجرا می شوند.
چه کنیم که این اتفاق نیفتد؟
یعنی هر بار فقط تابع مربوطه صدا شود؟؟

ساخت object از فرم



frmPopUp.Visible = true;
frmPopUp.Text = "لیست شعب بانکها";

frmPopUp.btn_OK.Click += new System.EventHandler(btn_OK_BanksBranches_Click);

frmPopUp.Show();



تابع btn_OK_BanksBranches_Click



private void btn_OK_BanksBranches_Click(object sender, EventArgs e)
{
this.dgv_Cheq.CurrentRow.Cells["clmnBranchTitle"].Value = frmPopUp.dgv_Info.CurrentRow.Cells[1].Value.ToString();
frmPopUp.Visible = false;

}


یک تابع دیگر برای دکمه ok



private void btn_OK_City_Click(object sender, EventArgs e)
{
this.dgv_Cheq.CurrentRow.Cells["clmnCity"].Value = frmPopUp.dgv_Info.CurrentRow.Cells[0].Value.ToString();
frmPopUp.Visible = false;

}

زمان اجرای هر کدام از دستوراتی که فرم را صدا می زنند همه توابع btn_OK اجرا می شوند
چگونه این اشکال برطرف می شود؟

Directx
یک شنبه 18 اردیبهشت 1390, 10:36 صبح
خب دوست عزیز چرا خودتو تو دردسر می ندازی مگه نمیگی از یه فرم چند تا instance می سازی شما هیچ تابعی برای کلیک اون دکمه در نظر نگیر و تابع رو موقع ساختن فرم(تعریف ابجکت ازش) به رویداد کلیک دکمه اضافه کن اینجوری دکمه ی روی هر فرم تابع مخصوص به خودشو داره

سمانه علوی فر
یک شنبه 18 اردیبهشت 1390, 10:49 صبح
خب دوست عزیز چرا خودتو تو دردسر می ندازی مگه نمیگی از یه فرم چند تا instance می سازی شما هیچ تابعی برای کلیک اون دکمه در نظر نگیر و تابع رو موقع ساختن فرم(تعریف ابجکت ازش) به رویداد کلیک دکمه اضافه کن اینجوری دکمه ی روی هر فرم تابع مخصوص به خودشو داره

نه یک instance می سازم از فرم ولی چند بار صداش می کنم ..

سمانه علوی فر
یک شنبه 18 اردیبهشت 1390, 10:53 صبح
مشکل حل شد
مرسی از راهنماییتون
برای هر بار استفاده یک نمونه ساختم
مرسی