همونطور که دوستان گفتن اگر خود کنترل Button رو به صورت Public تعریف کنید از طریق کد می تونید به رویداد کلیکش هم دسترسی داشته، به این صورت
private void Form1_Load(object sender, EventArgs e)
{
UserControl1 uc = new UserControl1();
uc.button1.Click += button1_Click;
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
اما اگر نمی خوای Modifire کنترل Button رو به حالت Public بزاری می تونی توی UseControl اینجوری بنویسی:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public event EventHandler Button1Click = null;
private void UserControl1_Load(object sender, EventArgs e)
{
button1.Click += button1_Click;
}
void button1_Click(object sender, EventArgs e)
{
if (Button1Click != null)
Button1Click(sender, e);
}
}
این کد در واقع یک Event سفارشی می سازه و شما برای استفاده می تونی اینجوری بنویسی:
private void Form1_Load(object sender, EventArgs e)
{
UserControl1 uc = new UserControl1();
uc.Button1Click += uc_Button1Click;
}
void uc_Button1Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
روش دوم دو تا مزیت داره:
1. استفاده کننده از یوزر کنترل نمی تونه خصوصیات Button1 رو دستکاری کنه
2. رویداد Button1Click یک رویداد رسمی برای UserControl1 است و در محیط Designer هم می تونی ازش استفاده کنی یعنی توی لیست رویداد های یوزر کنترلت نشون داده میشه