C#委托技术有很多作用,以下是一个简单的实例完成C#委托解决不同对象之间的传值或者方法调用的问题:
假设想想实现以下功能:
从主窗体中创建2个子窗体,想把2个子窗体的信息发送到主窗体中,并在主窗体中显示,在子窗体中输入想发送的信息,点击子窗体中的发送信息,主窗体直接显示子窗体发送的信息
假设主窗体为A,子窗体为B,从A中创建出2个B,而B窗体又想调用A窗体中的方法,你中有我,我中有你,混乱!!B是A中的一个对象,B是不能调用A的方法的
利用以下步骤:
首先在A中声明委托原型 public delegate void SendDataDelegate(string msg);
然后编写方法 private void ReciveMsg(string msg) 目的是显示收到的值
在B中声明委托变量 public SendDataDelegate SendData;
在从A创建B对象时,关联委托变量 frm2.SendData = ReciveMsg;
最后是使用委托变量 SendData(data)
子窗体代码:
public partial class ChildForm : Form
{
public ChildForm()
{
InitializeComponent();
}
//3.声明委托变量
public SendDataDelegate SendData;
private void btnSend_Click(object sender, EventArgs e)
{
string data = "消息来自" + this.Text + " 消息内容" + txtMsg.Text + "\r\n";
SendData(data);//5.使用委托变量
}
}
主窗体代码:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btnCreate_Click(object sender, EventArgs e)
{
for (int i = 1; i < 3; i++)
{
ChildForm frm2 = new ChildForm();
frm2.Text = "子窗体" + i.ToString();
frm2.Show();
//4.关联委托变量
frm2.SendData = ReciveMsg;
}
}
//1.声明委托
public delegate void SendDataDelegate(string msg);
//2.编写具体方法
private void ReciveMsg(string msg)
{
txtContent.Text += msg;
}
private void btnClear_Click(object sender, EventArgs e)
{
txtContent.Text = "";
}
}
}
效果: