从用户控件调用父窗体函数
用户控件内的按钮会引发窗体上的按钮OnClick事件,并且在用户控件的TextBox中输入内容会在窗体的TextBox中复制文本。
用户控件的使用通常需要开发父窗体和用户控件之间的通信。可以通过它们的属性和方法轻松访问用户控件。从用户控件调用父窗体函数并不那么简单。下面的示例展示了如何从用户控件内部引发父窗体事件并调用父窗体函数。
用户控件内的按钮会引发窗体上的按钮OnClick事件,并且在用户控件的TextBox中输入内容会在窗体的TextBox中复制文本。代码本身应该就能说明问题。

父窗体代码
public Form1()
{
InitializeComponent();
formControlPointer += new controlcall(btnHello_Click);
ucMyControl.userControlPointer = formControlPointer;
formFunctionPointer += new functioncall(Replicate);
ucMyControl.userFunctionPointer = formFunctionPointer;
}
public delegate void controlcall(object sender, EventArgs e);
public delegate void functioncall(string message);
private event controlcall formControlPointer;
private event functioncall formFunctionPointer;
private void btnHello_Click(object sender, EventArgs e)
{
MessageBox.Show("You typed: " + txtMessage.Text);
}
private void Replicate(string message)
{
txtReplicate.Text = message;
}
用户控件代码
public UserControl1()
{
InitializeComponent();
}
public Delegate userControlPointer;
public Delegate userFunctionPointer;
private void btnHello_Click(object sender, EventArgs e)
{
object[] arr = { null, null };
userControlPointer.DynamicInvoke(arr);
}
private void txtUserControl_TextChanged(object sender, EventArgs e)
{
userFunctionPointer.DynamicInvoke(txtUserControl.Text);
}