PDA

View Full Version : تعریف رویداد دبل کلیک



vahid2112
سه شنبه 17 بهمن 1391, 20:39 عصر
سلام
چطور برای یوزرکنترلم رویداد دبل کلیک تعریف کنم؟

vahid2112
سه شنبه 17 بهمن 1391, 20:48 عصر
اینم یه پروژه مثال:

99639

Mahmoud.Afrad
سه شنبه 17 بهمن 1391, 21:42 عصر
منظورتون دابل کلیک روی لیبل هاست؟
اگر بله :

راه آسونش اینه که Modifiers لیبل ها رو روی Protected Internal قرار بدید و در فرم برای هر لیبل رویداد بنویسید:

public Form1()
{
InitializeComponent();

UserControl1 u = new UserControl1();
this.Controls.Add(u);
foreach (Control c in u.Controls)
{
if (c is Label)
{
c.DoubleClick += new EventHandler(c_DoubleClick);
}
}
}
void c_DoubleClick(object sender, EventArgs e)
{
// your code here
// example
Label lbl = sender as Label;
MessageBox.Show(lbl.Text);
}






راه سخت ترش هم ایجاد رویداد جدیدی برای یوزرکنترل هست. در این روش Modifiers لیبل ها روی Private باقی میمونه.

یک دلیگیت با پارامتر مناسب و یک ایونت از روی آن ایجاد کنید.
در سازنده یوزرکنترل به همه لیبل ها یک رویداد دابل کلیک نسبت بدید و در رویدادگردانش ، رویداد جدیدی که تعریف کردید را Raise کنید.
کد کلاس یوزرکنترل به اینصورت باید در بیاد:

public partial class UserControl1 : UserControl
{
public delegate void ItemDoubleClick_EventHandler(object sender, EventArgs e);
public event ItemDoubleClick_EventHandler ItemDoubleClick;

public UserControl1()
{
InitializeComponent();
foreach (Control c in this.Controls)
{
if (c is Label)
{
c.DoubleClick += new EventHandler(c_DoubleClick);
}
}
}

void c_DoubleClick(object sender, EventArgs e)
{
if (ItemDoubleClick != null)
{
this.ItemDoubleClick(sender, e);
}
}
}


حالا به رویدادهای یوزرکنترل رویدادی به نام ItemDoubleClick اضافه شده که از طریق sender به لیبل دسترسی دارید.
کد فرم رو به اینصورت اصلاح کنید:

public Form1()
{
InitializeComponent();

UserControl1 u = new UserControl1();
this.Controls.Add(u);
u.ItemDoubleClick +=new UserControl1.ItemDoubleClick_EventHandler(u_ItemDo ubleClick);
}

void u_ItemDoubleClick(object sender, EventArgs e)
{
// your code here
// example
Label lbl = sender as Label;
MessageBox.Show(lbl.Text);
}