ایجاد event handler پویا در حین اجرای برنامه
درود
توی برنامه ای ساده به مشکلی برخوردم دوستان در صورت امکان راهنمایی کنن.
برنامه به این شکل هست که کاربر با استفاده از open file dialog تعدادی عکس رو انتخاب میکنه که این عکسا به ترتیب داخل فرم قرار داده میشن.هر موقع که روی هر یک از عکسا کلیک میشه،سایز عکس دو برابر بشه.
مشکل من اینجاست که نمیتونم برای تک تک عکس ها event handler بسازم.تنها برای آخرین عکس افزوده شده میتونم این کارو انجام بدم
ممنون میشم راهنمایی کنبد
بدرود
نقل قول: ایجاد event handler پویا در حین اجرای برنامه
نقل قول:
نوشته شده توسط
CoDe_LeArNeR
درود
توی برنامه ای ساده به مشکلی برخوردم دوستان در صورت امکان راهنمایی کنن.
برنامه به این شکل هست که کاربر با استفاده از open file dialog تعدادی عکس رو انتخاب میکنه که این عکسا به ترتیب داخل فرم قرار داده میشن.هر موقع که روی هر یک از عکسا کلیک میشه،سایز عکس دو برابر بشه.
مشکل من اینجاست که نمیتونم برای تک تک عکس ها event handler بسازم.تنها برای آخرین عکس افزوده شده میتونم این کارو انجام بدم
ممنون میشم راهنمایی کنبد
بدرود
سلام
این عکس رو چطوری نمایش میدی؟ بالاخره یه کنترلی رو صفحه گذاشتی دیگه.
یه eventhandler بنویس و هنگام load کنترل، رویداد کلیک رو وصل کن به اون eventhandler
صبا صبوحی
نقل قول: ایجاد event handler پویا در حین اجرای برنامه
سلام
فکر کنم نتونستم درست توضیح بدم
ببینید با یه button کاربر وصل میشه به open file dialog و عکس ها رو دونه دونه انتخاب میکنه و عکس ها به ترتیب رو فروم قرار داده میشن
من میتونم event handler رو به آخرین عکسی که افزوده شده بدم ولی نمیتون برای همه ی عکس های اضافه شده این کهر رو انجام بدم
ابزارش انجام این کارو نمیدونم
نقل قول: ایجاد event handler پویا در حین اجرای برنامه
نقل قول:
نوشته شده توسط
CoDe_LeArNeR
سلام
فکر کنم نتونستم درست توضیح بدم
ببینید با یه button کاربر وصل میشه به open file dialog و عکس ها رو دونه دونه انتخاب میکنه و عکس ها به ترتیب رو فروم قرار داده میشن
من میتونم event handler رو به آخرین عکسی که افزوده شده بدم ولی نمیتون برای همه ی عکس های اضافه شده این کهر رو انجام بدم
ابزارش انجام این کارو نمیدونم
سلام
بله، من هم گمان میکنم درست توضیح ندادی.
شما به عکس نمیتونی Event Handler اختصاص بدی. Event Handler رو به یه کنترل اختصاص میدی که اون عکس رو نشون میده.
حالا قبل از این که من و دیگران بتونیم کمکی کنیم به چند پرسش پاسخ بده.
1. تصاویر رو توسط چه کنترلی نشون میدی؟
2. آیا کنترلها از پیش ساخته شده هستن یا در حال اجرا تولیدشون میکنی.
3. اون Event Handler رو چطوری به آخرین کنترل میدی؟
صبا صبوحی
نقل قول: ایجاد event handler پویا در حین اجرای برنامه
public partial class Form1 : Form
{
public int i = 0,x=5,y=5;
PictureBox[] p1 = new PictureBox[100];
PictureBox tp = new PictureBox();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog o1 = new OpenFileDialog();
o1.Title = "انتخاب عکس";
o1.Filter = "JPEG FILES|*.jpg|BITMAP FILES|*.Bitmap|ALL FILES|*.*";
o1.InitialDirectory = "C:\\";
p1[i] = new PictureBox();
o1.ShowDialog();
p1[i].Height = 50;
p1[i].Width = 50;
p1[i].ImageLocation = (o1.FileName);
if (this.Width - x < 55)
{
x = 5;
y += 55;
}
p1[i].Top = y;
p1[i].SizeMode = PictureBoxSizeMode.StretchImage;
p1[i].Left = x;
p1[i].Click += new EventHandler(picture_click);
tp = p1[i];
x += 55;
this.Controls.Add(p1[i]);
i++;
}
private void picture_click(object sender, EventArgs e)
{
if (tp.Height == 50)
{
tp.Height = 100;
tp.Width = 100;
}
else if (tp.Height == 100)
{
tp.Height = 50;
tp.Width = 50;
}
}
}
فکر کنم کد رو ببینین بهتر متوجه میشین
نقل قول: ایجاد event handler پویا در حین اجرای برنامه
public partial class Form1 : Form { public int i = 0,x=5,y=5; PictureBox[] p1 = new PictureBox[100]; PictureBox tp = new PictureBox(); public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { }
private void button1_Click(object sender, EventArgs e) { OpenFileDialog o1 = new OpenFileDialog(); o1.Title = "انتخاب عکس"; o1.Filter = "JPEG FILES|*.jpg|BITMAP FILES|*.Bitmap|ALL FILES|*.*"; o1.InitialDirectory = "C:\\Users\\ImPoSsIbLe\\Documents\\ViberDownloads" ; p1[i] = new PictureBox(); o1.ShowDialog(); p1[i].Height = 50; p1[i].Width = 50; p1[i].ImageLocation = (o1.FileName); if (this.Width - x < 55) { x = 5; y += 55; } p1[i].Top = y; p1[i].SizeMode = PictureBoxSizeMode.StretchImage; p1[i].Left = x; p1[i].Click += new EventHandler(picture_click); tp = p1[i]; x += 55; this.Controls.Add(p1[i]); i++; }
private void picture_click(object sender, EventArgs e) { if (tp.Height == 50) { tp.Height = 100; tp.Width = 100; } else if (tp.Height == 100) { tp.Height = 50; tp.Width = 50; } }
}
فکر کنم کد رو ببینین بهتر متوجه میشین
نقل قول: ایجاد event handler پویا در حین اجرای برنامه
سلام
با دیدن این کد خیلی حرف دارم برای گفتم. من اینا رو میگم بلکه اشکالهات رو رفع کنی، و امیدوارم ناراحت نشی.
1. امیدوارم بههم ریختگی این کد در اثر بد کپی شدن کد در این سایت باشه و خودت کد رو اینشکلی نبینی.
2. اون object sender که اولین پارامتر event handler هست، گمان میکنی برای چیه؟ برای اینه که اون tp سراسری رو نداشته باشی.
var pictureBox = (PictureBox)sender;
اون مشکلی که الان داری به همین دلیله، بجای استفاده از tp، این خط رو به سطر اول Event Handler اضافه کن، بعد از اون متغیر استفاده کن.
3. گمان کنم تازه #C رو شروع کردی و قبلش هم VB کار میکردی. دوست من، متغیر سراسری زیاد و نادرست استفاده میکنی.
Array روش قدیمی هست و دیگه خیلی کم استفاده میشه، روشهای خیلی بهتر مثل List و Collection و Dictionary هست که مزایای زیادی داره.
تو این مثال شما List گزینهی خیلی بهتری هست.
4. کد رو خیلی تو هم تو هم نوشتی، رعایت ترتیب هم برای خودت خیلی بهتره هم برای کسی که پس از شما قراره کد رو بخونه.
مثلاً وسط تعریف خواص pictureBox اومدی فرم باز کردی. خوب یا قبلش باز کن یا بعدش.
و در آخر خیلی خیلی جدی توصیه میکنم که برنامهی Resharper رو بگیری و نصب کنی، جلوی خیلی از اشتباههای سهوی رو میگیره.
من که سالهای زیادی هست که حرفهای برنامهنویسی میکنم خیلی به دردم میخوره، برای تازهکارها گمان میکنم از نون شب واجبتر باشه.
باز هم تاکید میکنم که بیان اشکالهای کد شما برای ناراحت کردن شما نیست. و امیدوارم که با رفع این اشکالها به جمع برنامهنویسها خوب بپیوندی.
صبا صبوحی
نقل قول: ایجاد event handler پویا در حین اجرای برنامه
سلام
بی نهایت ممنونم واقعا لطف کردین
نه تنها دلیلی برای ناراحت شدن نیست،بلکه واجبه بی نهایت تشکر کنم.
من کلا 5 ماه بیشتر نیست برنامه نویسی کار میکنم و 1 ماه بیشتر نیست C# کار میکنم + 1 هفته بیشتر نیست با فرم کار میکنم.
بازم تشکر میکنم
نقل قول: ایجاد event handler پویا در حین اجرای برنامه
نقل قول:
نوشته شده توسط
CoDe_LeArNeR
سلام
بی نهایت ممنونم واقعا لطف کردین
نه تنها دلیلی برای ناراحت شدن نیست،بلکه واجبه بی نهایت تشکر کنم.
من کلا 5 ماه بیشتر نیست برنامه نویسی کار میکنم و 1 ماه بیشتر نیست C# کار میکنم + 1 هفته بیشتر نیست با فرم کار میکنم.
بازم تشکر میکنم
سلام
خواهش میکنم، کار مهمی نکردم.
اما حتماً برنامهی Resharper رو دانلود و نصب کن. خیلی بهت کمک میکنه. نصبش هم خیلی راحته، محیط VS رو کاملاً در دست میگیره و
جلوی تعداد زیادی از اشتباههای متنی، و منطقی و حتا بدخطی رو میگیره.
اینجا اجازه اشاره به این لینکها رو نداریم. تو گوگل بزن «دانلود Resharper»
صبا صبوحی