PDA

View Full Version : سوال: خلاصه نویسی در اجرای رویداد



پرستو پارسایی
چهارشنبه 06 فروردین 1393, 23:35 عصر
سلام
من در یک پروژه 40 عدد پیکچرباکس دارم و یک تکست باکس .
میخوام روی هرکدام از این پیکچر باکس ها کلیک میکنم عدد مربوط به خودشو تو تکست باکس بیاره مثلا 1 تا 40
نوشتن رویداد کلیک رو برای هر پیکچر باکس میدونم .
آیا راه مناسبتر و کوتاهتری هست که من 40 بار رویداد رو نخوام بنویسم
ممنون میشم در صورت اطلاع پاسخ دهید .
با سپاس

Mani_rf
چهارشنبه 06 فروردین 1393, 23:46 عصر
برای این کار دو روش وجود داره که توی این لینک (http://msdn.microsoft.com/en-us/library/3exstx90(v=vs.110).aspx) یکی از اونها و در این لینک (http://msdn.microsoft.com/en-us/library/7taxzxka.aspx) یکی دیگر توضیح داده شد.

پرستو پارسایی
پنج شنبه 07 فروردین 1393, 00:06 صبح
ممنونم از توجه شما ولی بکارگیری هندل رو سر در نیاوردم:خجالت:

Mani_rf
پنج شنبه 07 فروردین 1393, 09:06 صبح
کدوم قسمت رو متوجه نشدی. دقیقا بگو برات توضیح بدم.

پرستو پارسایی
پنج شنبه 07 فروردین 1393, 15:23 عصر
نحوه بکار گیری رویداد پیکچرباکس ها رو متوجه نمیشم . چطور پیکچر باکس باید با کلیک مقید بشه به یک شماره خاص در تکست باکس.
ممنونم از توجه شما

Mousavmousab
پنج شنبه 07 فروردین 1393, 15:51 عصر
سلام

من قبلاٌ VB6 کار می کردم الان 4 سالی است که #C کار می کنم.

تو زحمت می افتی کد را تبدیل کنی !!!

خوب اون طوری که من متوجه شدم شما میخوای یک رویداد Click داشته باشی که مربوط به هر 40 تا picturebox باشه به طوری که هر موقع روی هر یک از picturebox ها کلیک کردی بدونی روی کدوم کلیک کردی تا بتونی کارتو انجام بدی.
اگر کار شما به این شکل است و من سوال را خوب متوجه شدم شما باید picturebox ها را با کد نویسی اجرا کنی تا بتونی راحت تر مدیریت کنی. یعنی اینکه شما نباید زمان Design این picturebox ها را به پروژه ات روی فرم اضافه کنی و بعد مدیریتشون کنی. نه این خوب نیست چون مدیریتش خیلی سخت میشه.

راه حل؟



private void Form1_Load(object sender, EventArgs e)
{
PictureBox[] pics = new PictureBox[10];
int x =20;
int y = 40;
int width = 300;
int height = 100;
for (int i = 0; i < pics.Length; i++)
{
pics[i] = new PictureBox();
pics[i].Width = width;
pics[i].Height = height;
pics[i].Location = new Point(x, y);
y += pics[i].Height;
pics[i].Tag = i;
pics[i].Click+= new EventHandler(Form1_Click);
pics[i].BorderStyle = BorderStyle.Fixed3D;
this.Controls.Add(pics[i]);
}
}

private void Form1_Click(object sender, EventArgs e)
{
PictureBox p = (PictureBox)sender;

textBox1.Text = p.Tag.ToString();
}




من می خواستم به شما نشون بدم که کدام picturebox روش کلیک شده ، مجبور شدم از ویژگی tag استفاده کنم. در زمان ساخت به هر picturebox یک مقدار برای tag اختصاص دادم تا از هم متمایز باشند.
همین طور borderstyle آن ها را 3d کردم.
فقط دقت کنید که من یک Event دستی نوشتم و هر دفعه که یک picturebox را ساختم بهش اضافه کردم.
نکته مهم: اون اسم را خود IDE انتخاب کرد ( منظورم Form1_Click است) و نامش اصلاٌ مهم نیست.
امیدوارم به دردتون بخوره

پرستو پارسایی
پنج شنبه 07 فروردین 1393, 20:08 عصر
ممنونم از پاسختان ولی من حتما باید هنگام طراحی فرمم پیکچر باکس ها رو ایجاد کنم.

Mousavmousab
جمعه 08 فروردین 1393, 18:15 عصر
الان یک چیز دیگه به ذهنم رسید.

شما می تونی picturebox ها را بسازی توی Design time بعد به این شکل توی Form_load کنترلش کنی.


private void Form1_Load(object sender, EventArgs e)
{
int i = 0;
foreach (var item in this.Controls.OfType<PictureBox>())
{
item.Tag = i++;
item.Click+= new EventHandler(item_Click);
}
}

private void item_Click(object sender, EventArgs e)
{
PictureBox SelectedPictureBox = (PictureBox)sender;
MessageBox.Show(SelectedPictureBox.Tag.ToString()) ;
}




فکر می کنم این دفعه دیگه مشکلتون باید حل بشه
سوالی بود در خدمتم.
بدرود

پرستو پارسایی
جمعه 08 فروردین 1393, 18:54 عصر
سلام ممنونم
کد رو به ویبی تبدیل کردم ولی بخشی از اون رو خطا گرفت

تو ارور توضیح داده که var پشتیبانی نمیشه

Mousavmousab
جمعه 08 فروردین 1393, 20:10 عصر
سلام امروز یک مقدار وی بی کار کردم یه چیزایی یاد گرفتم.
این طوری بنویس



For Each ctrl As PictureBox In Me.Controls.OfType(Of PictureBox)()

Next