PDA

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



hamidsina
سه شنبه 14 خرداد 1392, 18:37 عصر
سلام من با کد زیر یه رویداد برای دیتا گرید ویو تعریف کردم ولی این رویداد به تعداد ردیفهای جدول اجرا میشه
اگه لطف کنید بگید چیکار کنم که این رویداد فقط یکبار اجرا بشه ممنون میشم




private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

{


if (dataGridView1.CurrentCell.ColumnIndex == 3)

{

Cbox = e.Control
as ComboBox;


if (Cbox != null)

{

Cbox.TextChanged+=
new EventHandler(Cbox_TextChanged);

}

}


else

{


if (Cbox != null)

{

}

}

}


private void Cbox_TextChanged(object sender, EventArgs e)

{


if (dataGridView1.CurrentCell.ColumnIndex == 3 && Cbox.Text.Trim() == "")

{


Form_Data Fdata = new Form_Data();

Fdata.ShowDialog();

dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value =
ClassVar.DataSend;


ClassVar.DataSend = "";

}


if (dataGridView1.CurrentCell.ColumnIndex == 3 && Cbox.Text.Trim() == "")

{

dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value = "";

}

}

alexmcse
سه شنبه 14 خرداد 1392, 19:15 عصر
سلام
یعنی برای یک ردیف فقط انجام بشود؟
اگر این طور است در آخر دستورات از دستور return; استفاده کن

Mahmoud.Afrad
سه شنبه 14 خرداد 1392, 20:00 عصر
اگر تغییر آیتم کمبوباکس مد نظر هست از رویداد SelectedIndexChanged استفاده کنید.
اما جواب شما:
با ورود به سلول و نمایش EditingControl اون سلول(کمبوباکس) ، هر بار رویداد جدیدی به Cbox اضافه میشه.
قبل از اضافه کردن رویداد جدید رویداد قبلی رو حذف کنید( -= ):

ComboBox Cbox;
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView1.CurrentCell.ColumnIndex == 3)
{
Cbox = e.Control as ComboBox;

if (Cbox != null)
{
Cbox.SelectedIndexChanged -= new EventHandler(Cbox_SelectedIndexChanged);
Cbox.SelectedIndexChanged += new EventHandler(Cbox_SelectedIndexChanged);
}
}
else
{
if (Cbox != null)
{

}
}
}

void Cbox_SelectedIndexChanged(object sender, EventArgs e)
{
if (dataGridView1.CurrentCell.ColumnIndex == 3 && Cbox.Text.Trim() == "")
{
Form_Data Fdata = newForm_Data();
Fdata.ShowDialog();
dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value = ClassVar.DataSend;
ClassVar.DataSend = "";
}

if (dataGridView1.CurrentCell.ColumnIndex == 3 && Cbox.Text.Trim() == "")
{
dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value = "";
}
}

hamidsina
سه شنبه 14 خرداد 1392, 22:52 عصر
تشکر میکنم از جوابتون
در پناه حق