关于使用委托和直接调用方法,实在不明白 求指教
对于使用委托和直接调用方法有什么区别么 ,为什么要使用委托不直接调用方法呢?看了很多资料没明白,初学,求指导,最好能有案例示意一下 多谢多谢
------解决方案--------------------
A 窗口打开FT 窗口,FT窗口向A窗口用事件委托传值
private void button1_Click(object sender, EventArgs e)
{
FT t = new FT();
t.sendM += new FT.send(t_sendM);
t.Show();
}
void t_sendM(string mess)
{
txtMessage.Text=mess;
}
FT窗口代码
public delegate void send(string mess);
public event send sendM;
private void button1_Click(object sender, EventArgs e)
{
sendM(txtSend.Text);
}
------解决方案--------------------如果可以直接调用那就不用委托了
1楼的例子就是个简单的委托了。
在你打开的窗体触发事件的时候,需要在原窗体中获取到点击的信息,你觉得用原窗体调用下这个函数,会在你点击的时候触发吗?
答案肯定是不能。
所以定义委托,委托别人去给你做。就是这个意思...
不知楼主是否理解
------解决方案--------------------看这个对象是否有
+=...
如果没有+=DelClick就为空了.
if (DelClick != null)
DelClick(sender, new EventArgs());
------解决方案--------------------关于委托,我也是最近才弄明白一些
委托主要用于跨线程调用控件
比如一个窗体,里面有一个进度条,一个按钮,按钮执行一个方法,进度条来显示进度。
如果不用线程,按下按钮时,会出现界面假死,用了线程,就无法直接调用进度条(在MSDN上看,不让这样调用的原因是出于保密性问题,在.net 2.0以后更新的)
改写后就是定义一个委托(参数根据需要委托的方法设定),再定义一个调用进度条的方法,通过委托把参数传递给进度条的方法。
声明一个委托很简单,比如 public delegate void SetProg(int max, int progvalue);//这就是一个调用进度条的委托(进度条有2个参数所以委托也定义了两个),再写一个调用进度条的方法
private void SetProg(int max,int progvalue)
{
if( progressBar1 .InvokeRequired)
{
SetTextInvoke myInvoke = new SetTextInvoke(SetProg);
this.Invoke(myInvoke, new object[] { m