你可以把委托当成一个类型来用,你如果通过构造函数传递一个int类型的值 你会吧,只不过现在换成委托类型的了。你同样可以这样用。
比如:有一个委托:public delegate string ShowMsg(string msg);
定义一个方法签名和返回值相同的方法,该方法的作用是将字符串转换为大写。
private string ShowMsg(string msg)
{
return msg.ToUpper();
}
你在父窗体单击一个按钮,打开子窗体,将方法传入,这样子窗体,就可以使用该方法了。
父窗体中代码:
private void button1_Click(object sender, EventArgs e)
{
ChildForm child = new ChildForm(ShowMsg);
child.ShowDialog();
}
private string ShowMsg(string msg)
{
return msg.ToUpper();
}
子窗体代码:
public partial class ChildForm : Form
{
private ShowMsg showMsgDelegate;
public ChildForm(ShowMsg showMsgDelegate)
{
InitializeComponent();
this.showMsgDelegate = showMsgDelegate;
}
private void ChildForm_Load(object sender, EventArgs e)
{
this.label1.Text=showMsgDelegate("abcdefghigklmnopqrstuvwxyz");
}
}
结果:
主窗体new子窗体对象后,直接给子窗体的字段赋值就行了。这个有什么好纠结的·,放在构造函数是里比较好
怎么放呢 我确实不知道
这是主窗体 public delegate void ChangeValue(string text); private void button3_Click(object sender, EventArgs e) { ChangeValue change = new ChangeValue(Change); ChildForm3 form = new ChildForm3(change); form.ShowDialog(); } void Change(string text) { textBox3.Text = text; } 这个是子窗体 Delegate Dele = null; public ChildForm3(Delegate dele) { InitializeComponent(); Dele = dele; }
知道事件吗?比如你给一个窗体的事件定义一个委托,但这个事件被触发的时候,
就会回执行这个委托.
同理,在主窗体中
子窗体 a=new 子窗体();
a.事件+=new 委托();
到时候, 就会触发了
恩 这个是可以用 但是 我就是想知道怎么传递委托 将委托作为参数呢
但是 我又传不过去...o(╯□╰)o
委托,你就当成一个类型来用就可以了。