PDA

View Full Version : سوال: مدیریت Event در datagrid یی که در حین اجرای برنامه ایجاد می شود



ztx4
شنبه 09 بهمن 1389, 13:27 عصر
دوستان سلام.
من یک فرم دارم که دارای یک تب کنترل هست.
در حین اجرا با توجه با فشردن دکمه های مختلف سربرگ هایی به این تب کنترل اضافه می شه که هر سربرگ دارای یک datagrid هست.
دیتا گرید ها با کدی شبیه به کد زیر به برنامه اضافه می شوند:



DataGrid dg=new DataGrid();
this.Controls.Add(dg);
حالا من می خوام رویداد کلیک و چند تا رویداد دیگه رو مدیریت کنم. اما نمی دونم چه طور این کار رو انجام بدم.
لطفا راهنمایی بفرمایید.
ممنون از همه ی شما دوستان

ali.rezaei7
شنبه 09 بهمن 1389, 15:12 عصر
درود. براي اختصاص دادن يك رويداد به كنترل، اول بايد روال رويداد رو بصورت دستي نوشته بشه و بعد، اين روال در رويداد مورد نظر كنترل Set بشه.مثال:

ايجاد رويداد:

void dgv_Click(object sender, EventArgs e)
{
DataGridView GridView = (DataGridView)sender;//آبجكت گيريدويو به كنترلي كه اين تابع رو فرخواني كرده، اشاره مي كند
GridView.Columns.Add("New", "New");

}


عبارت بالا روالي هست كه به رويداد Click گيريد ويو اختصاص مي ديم، و هر وقت كه روي كنترل كليك بشه، اين رويداد اجرا مي شه.

نحوه اختصاص دادن رويداد به كنترل:


DataGridView dgv = new DataGridView();

Controls.Add(dgv);

dgv.Click += new EventHandler(dgv_Click);//روال نوشته شده به رويداد كليك كنترل اختصاص داده شده


قطعه كد بالا روالdgv_Click را به رويداد Click كنترل نسبت داده. و هر وقت روي اين كنترل كليك بشه، روال dgv_Click اجرا مي شه.
اگه برات سخته كه قالب رويداد رو دستي بنويسي، مي توني بعد از عبارت "dgv.Click +=" دو بار دكمه TAB رو بزني، تا خود IDE اين روداد رو برات بسازه.

مشكلي بود در خدمتم.

موفق باشي.

ztx4
دوشنبه 11 بهمن 1389, 16:59 عصر
درود. براي اختصاص دادن يك رويداد به كنترل، اول بايد روال رويداد رو بصورت دستي نوشته بشه و بعد، اين روال در رويداد مورد نظر كنترل Set بشه.مثال:

ايجاد رويداد:

void dgv_Click(object sender, EventArgs e)
{
DataGridView GridView = (DataGridView)sender;//آبجكت گيريدويو به كنترلي كه اين تابع رو فرخواني كرده، اشاره مي كند
GridView.Columns.Add("New", "New");

}


عبارت بالا روالي هست كه به رويداد Click گيريد ويو اختصاص مي ديم، و هر وقت كه روي كنترل كليك بشه، اين رويداد اجرا مي شه.

نحوه اختصاص دادن رويداد به كنترل:


DataGridView dgv = new DataGridView();

Controls.Add(dgv);

dgv.Click += new EventHandler(dgv_Click);//روال نوشته شده به رويداد كليك كنترل اختصاص داده شده


قطعه كد بالا روالdgv_Click را به رويداد Click كنترل نسبت داده. و هر وقت روي اين كنترل كليك بشه، روال dgv_Click اجرا مي شه.
اگه برات سخته كه قالب رويداد رو دستي بنويسي، مي توني بعد از عبارت "dgv.Click +=" دو بار دكمه TAB رو بزني، تا خود IDE اين روداد رو برات بسازه.

مشكلي بود در خدمتم.

موفق باشي.


ممنون از این پاسخ
اما من یک مشکل دارم.
در این حالت به این گزینه ها دسترسی ندارم:



e.columnIndex
e.rowIndex


چه کنم؟

مرسی

ali.rezaei7
دوشنبه 11 بهمن 1389, 17:24 عصر
درود. رويداد كليك يك مثال بود. شما رويداد مورد نظر خودتو ايجاد كن.(همشون از يك قانون پيروي مي كنند). اگه منظورتون استفاده از رويداد CellClick بجاي Click است:

1. اول روال رو بنويس:


private void Cell_Click(object sender, DataGridViewCellEventArgs e)
{

}
بعد اونو به رويداد Cell_Click كنترل گيريد ويو نسبت بده:


dataGridView1.CellClick += new DataGridViewCellEventHandler(Cell_Click);


بايد حتما از علامت =+ استفاده كني. بعد از انجام اين كار خود IDE به وسيله يه Tip بقيه راه رو نشون مي ده.
بهتون توصيه مي كنم، اصول پايه اي برنامه نويسي C# رو كامل ياد بگيريد. مواردي مثل رويدادها، delegate ها و...