ارسال پارامتر به یک رویدادی که در زمان اجرا ساخته میشه
سلام وقت بخیر. من در حین اجرا یه کنترل پیکجر باکس میسازم و براش یه منو هم میسازم. حالا چطوری میتونم تصویر اون پیکجر باکس رو به رویداد کلیک اون منو ارسال کنم؟
کد های کامل شده که به خوبی هم کار میکنه فقط مونده پاس دادن تصویر اون پیکجر باکس به رویداد کلیک منو
ContextMenu cm = new System.Windows.Forms.ContextMenu();
MenuItem mi = new MenuItem("Print");
public void set()
{
TabPage addedTabPage = new TabPage("صفحه اول");
tabControl_webBrowsers.TabPages.Add(addedTabPage);
addedTabPage.AutoScroll = true;
PictureBox _P = new PictureBox();
_P.Height = 842;
_P.Width = 595;
_P.SizeMode = PictureBoxSizeMode.StretchImage;
_P.Image =Image.FromFile(path);
_P.MouseDown += _P_MouseDown;
cm.MenuItems.Add(mi);
mi.Click +=new EventHandler(mi_Click);
addedTabPage.Controls.Add(_P);
}
void _P_MouseDown(object sender, MouseEventArgs e)
{
if(e.Button==System.Windows.Forms.MouseButtons.Rig ht)
{
cm.Show((Control)sender,e.Location);
}
}
private void mi_Click(object sender, EventArgs e)
{
//تصویر اون پیکجر باکس رو چجوری اینجا دریافت کنم؟
}
نقل قول: ارسال پارامتر به یک رویدادی که در زمان اجرا ساخته میشه
نیازی به MouseDown نیست. contextmenustrip پیکچرباکس را برابر با منویی که ایجاد کردید بگذارید. در رویداد کلیک منو، SourceControl کنترل فراخواننده منواستریپ خواهد بود.
https://msdn.microsoft.com/en-us/lib...cecontrol.aspx
نقل قول: ارسال پارامتر به یک رویدادی که در زمان اجرا ساخته میشه
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
خب صحیح برای زیر منو ها چجوری رویدادشو ست کنم؟
نقل قول: ارسال پارامتر به یک رویدادی که در زمان اجرا ساخته میشه
نقل قول:
نوشته شده توسط
رامین مرادی
خب صحیح برای زیر منو ها چجوری رویدادشو ست کنم؟
فرقی نمیکند.
نقل قول: ارسال پارامتر به یک رویدادی که در زمان اجرا ساخته میشه
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
فرقی نمیکند.
شرمنده متوجه نشدم. حتی برا زیر منو ها رویداد کلیک ایجاد کردم اما نتونستم مقداری ازشون بخونم.در صورت امکان تکه کد قرار بدین
نقل قول: ارسال پارامتر به یک رویدادی که در زمان اجرا ساخته میشه
ContextMenu cm = new System.Windows.Forms.ContextMenu();
MenuItem mi = new MenuItem("Print");
public void set()
{
TabPage addedTabPage = new TabPage("صفحه اول");
tabControl_webBrowsers.TabPages.Add(addedTabPage);
addedTabPage.AutoScroll = true;
PictureBox _P = new PictureBox
{
Height = 842,
Width = 595,
SizeMode = PictureBoxSizeMode.StretchImage,
ContextMenu = cm,
Image = Image.FromFile(@"...")
};
cm.MenuItems.Add(mi);
mi.Click += new EventHandler(mi_Click);
addedTabPage.Controls.Add(_P);
}
private void mi_Click(object sender, EventArgs e)
{
PictureBox pb = cm.SourceControl as PictureBox;
//...
}
نقل قول: ارسال پارامتر به یک رویدادی که در زمان اجرا ساخته میشه
دستتون درد نکنه. فقط یه مسئله وقتی تب ها چندتا باشه رویداد که اتفاق می افته به تعداد تب ها تکرار میشه.
کد های کاملمه. که میخوام از اون تصویر پرینت بگیرم. با پرینت مشکلی نداره اما اگه تب دوتا یا بیشتر از یکی باشه دیالوگ پرینت به تعداد صفحات باز میشه
public void Set(){
TabPage addedTabPage1 = new TabPage("صفحه دوم");
tabControl_webBrowsers.TabPages.Add(addedTabPage1) ;
addedTabPage1.AutoScroll = true;
PictureBox _P1 = new PictureBox();
_P1.Height = 842;
_P1.Width = 595;
_P1.SizeMode = PictureBoxSizeMode.StretchImage;
_P1.Image = Image.FromFile(path);
_P1.MouseDown += _P_MouseDown;
cm.MenuItems.AddRange(new MenuItem[]{ mi1,mi2});
mi1.Click += new EventHandler(mi1_Click);
addedTabPage1.Controls.Add(_P1);
TabPage addedTabPage2 = new TabPage("صفحه دوم");
tabControl_webBrowsers.TabPages.Add(addedTabPage2) ;
addedTabPage2.AutoScroll = true;
PictureBox _P2 = new PictureBox();
_P2.Height = 842;
_P2.Width = 595;
_P2.SizeMode = PictureBoxSizeMode.StretchImage;
_P2.Image = Image.FromFile(path);
_P2.MouseDown += _P_MouseDown;
cm.MenuItems.AddRange(new MenuItem[]{ mi1,mi2});
mi1.Click += new EventHandler(mi1_Click);
addedTabPage2.Controls.Add(_P2);
}
void _P_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
cm.Show((Control)sender, e.Location);
}
}
void mi1_Click(object sender, EventArgs e)
{
PictureBox p = cm.SourceControl as PictureBox;
MessageBox.Show(p.Name);
pictureBox1.Image = p.Image;
System.Drawing.Printing.PrintDocument myPrintDocument1 = new System.Drawing.Printing.PrintDocument();
PrintDialog myPrinDialog1 = new PrintDialog();
PaperSize ps = new PaperSize("A4", 827, 1170);
myPrintDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(prin tDocument1_PrintPage);
myPrintDocument1.DefaultPageSettings.PaperSize = ps;
myPrinDialog1.Document = myPrintDocument1;
if (myPrinDialog1.ShowDialog() == DialogResult.OK)
{
myPrintDocument1.Print();
}
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Image i = pictureBox1.Image;
float newWidth = i.Width * 100 / i.HorizontalResolution;
float newHeight = i.Height * 100 / i.VerticalResolution;
float widthFactor = newWidth / e.PageBounds.Width;
float heightFactor = newHeight / e.PageBounds.Height;
if (widthFactor > 1 | heightFactor > 1)
{
if (widthFactor > heightFactor)
{
newWidth = newWidth / widthFactor;
newHeight = newHeight / widthFactor;
}
else
{
newWidth = newWidth / heightFactor;
newHeight = newHeight / heightFactor;
}
}
e.Graphics.DrawImage(i, 0, 0, (int)newWidth, (int)newHeight);
}
نقل قول: ارسال پارامتر به یک رویدادی که در زمان اجرا ساخته میشه
متد Click را دو بار به رویداد نسبت دادید خط 11و12 در 25و26 تکرار شده که نیاز به تکرار نیست.
نقل قول: ارسال پارامتر به یک رویدادی که در زمان اجرا ساخته میشه
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
متد Click را دو بار به رویداد نسبت دادید خط 11و12 در 25و26 تکرار شده که نیاز به تکرار نیست.
ممنون اصلا توجهی نکرده بودم به اون خخخخ:لبخند: