PDA

View Full Version : سوال: ایجاد رویداد در هنگام اجرا



j_naroogha@yahoo.com
چهارشنبه 30 آذر 1390, 18:16 عصر
سلام دوستان کدی رو نوشتم که در هنگام اجرای برنامه شییی رو ایجاد می کنه(منظورم picture box است) .
حال چگونه میتونم برای رویداد این picture box ها که آرایه کنترلی ایجاد شده در runtime هستند کد نوشت؟

ma.rad
چهارشنبه 30 آذر 1390, 18:34 عصر
سوالتون اصلا واضح نیست بیشتر توضیح بدید؟

m.chenani
چهارشنبه 30 آذر 1390, 19:26 عصر
دوست عزیز می خواین یک رویداد(Event) در حال اجرا اضافه کنید؟

cccccccccc
پنج شنبه 01 دی 1390, 00:30 صبح
سلام
pictureBox1.Click+=new EventHandler(pictureBox1_Click);
pictureBox1.MouseMove+=new MouseEventHandler(pictureBox1_MouseMove);
.
.
.
داخل پرانتز اسم تابع است

majidrezaei2007
پنج شنبه 01 دی 1390, 00:38 صبح
picturebox1.click+=2 ta tabe poshte sare ham

j_naroogha@yahoo.com
پنج شنبه 01 دی 1390, 01:14 صبح
بذارین اینجوری مطرح کنم.
من میخواهم در زمان اجرا n تا picture box رو روی فرم نشون بدم . هر کدوم از این picture box ها یه تصویر رو نشون بدن .
روی هر کدوم که کلیک کردم(یا یه رویداد دیگه ) یه کاری انجام بده.
برای قسمت اول که شاید بشه با دساورات زیر انجامش داد (مطمئن نیستم شاید جواب نداد...)
picture box p[10] =new picture box()
حال میخام برای p با اندیس 10 یه رویداد کلیک بنویسم.
چطوری؟

asadegha
پنج شنبه 01 دی 1390, 03:33 صبح
PictureBox[] p = new PictureBox[10];
for (int i = 0; i < 10; i++)
{
p[i] = new PictureBox();
p[i].Click += new EventHandler(ClickFunction);
}

این طوری تابع ClickFunction رو به رویداد click تمام picbox ها وصل میکنی.
اگه می خوای 2 تا تابع رو وصل کنی هم به صورت زیر بنویس:


PictureBox[] p = new PictureBox[10];
for (int i = 0; i < 10; i++)
{
p[i] = new PictureBox();
p[i].Click += new EventHandler(ClickFunction1);
p[i].Click += new EventHandler(ClickFunction2);
}

asadegha
پنج شنبه 01 دی 1390, 03:35 صبح
البته اگه هر کدوم از آیتم های آرایه رو قبلا new کردی دیگه لازم نیست بنویسی.
یعنی کدت این شکلی میشه:



for (int i = 0; i < 10; i++)
{
p[i].Click += new EventHandler(ClickFunction1);
p[i].Click += new EventHandler(ClickFunction2);
}

j_naroogha@yahoo.com
پنج شنبه 01 دی 1390, 18:05 عصر
مرسی از جواب تون .
همه ی picture box ها رو روی صفحه نشون دادم .حالا چگونه میتونم اندیس picture box ی رو که اشاره گر ماوس روی اون قرار داره رو پیدا کنم؟
بذارین واضح تر بگم:
تابع ClickFunction من یه ورودی رو به عنوان ورودی دریافت میکنه و براساس این ورودی تصمیم خاصی رو اتخاذ می کنه. مثلا اگه یک باشه پیغام تصویر یک و اگه دو باشه پیغام تصویر دو رونشون میده.
مشکل من اینه که چگونه اندیس این picture box ها رو بدست آورم؟

Mahmoud Zaad
پنج شنبه 01 دی 1390, 20:54 عصر
سلام
می تونی از خاصیت تگ picturebox ها استفاده کنی. مثلا تگ ها رو شماره گذاری کنی.

asadegha
جمعه 02 دی 1390, 03:38 صبح
این برای آرایه یک بعدی از picbox


PictureBox[] p= new PictureBox[10];;
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < p.GetUpperBound(0); i++)
{
p[i] = new PictureBox();
p[i].Click += new EventHandler(ClickFunction);
p[i].Parent = panel1;
.
.
.
p[i].Tag = i;
}

}

void ClickFunction(object sender, EventArgs e)
{
int u = int.Parse(((PictureBox)sender).Tag.ToString());
}

asadegha
جمعه 02 دی 1390, 03:43 صبح
این هم برای آرایه دو بعدی


private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < p.GetUpperBound(0); i++)
{
for (int j = 0; j < p.GetUpperBound(1); j++)
{
p[i,j] = new PictureBox();
p[i,j].Click += new EventHandler(ClickFunction);
p[i,j].Parent = panel1;
.
.
.
p[i,j].Tag = i + "," + j;
}

}

void ClickFunction(object sender, EventArgs e)
{
string[]str =((PictureBox)sender).Tag.ToString().Split(',');
int i = int.Parse(str[0]); // Row
int j = int.Parse(str[1]); // Col
}

j_naroogha@yahoo.com
جمعه 12 اسفند 1390, 11:30 صبح
میشه با یه مثال توضیح بدین؟
ممنون