这个是很久以前,也就是刚学C#的时候写的一个程序,既然用到了委托(delegate)也就顺便拿来说一下,话不多说,看程序吧:
查找窗体中声明如下:
public delegate void SearchText(string s);
public delegate void Replace(string s,string s1);
SearchText st;
Replace rp;
public void Init(SearchText s,Replace r)
{
st = s;
rp = r;
}
private void button1_Click(object sender, EventArgs e)
{ //按钮:查找下一个
if (st != null)
st(this.sstxt.Text);
}
在主窗体的查找菜单下的代码:
private void 查找ToolStripMenuItem_Click(object sender, EventArgs e)
{
frmFind fd = new frmFind();
fd.Init(search,replace);//replace方法没有粘出来
fd.Show(this);
}
并且实现SearchText的功能,如下:
private void search(string s)
{
int i = this.TextBox1.Text.IndexOf(s,pos);
pos = i + 1;
if (i >= 0)
{
this.TextBox1.SelectionStart = i;
this.TextBox1.SelectionLength = s.Length;
TextBox1.Focus();
}
}
看到代码之后我们很容易发现,委托就是委托(拜托),不是自己干,只是说明程序到这之后要去调用另外一个方法而已(具体实现可以F11看一下)。说白了,委托就是函数或者方法的另外一种形式,其特别之处在于这个委托传递的参数是个方法(本文中是search和replace)。