C#用户控件与主窗口的消息传递

1.介绍按钮委托及其消息

2.创建一个用户控件与主窗口的消息传递程序

 

我们为button创建鼠标点击事件MyClick,程序会自动为我们增加一些代码。

this.MouseClick+=newSystem.Windows.Forms.MouseEventHandler(this.MyClick);

上面this.MouseClick是C#中定义的鼠标单击事件。

它被定义为:

public event MouseEventHandler MouseClick

;而MouseEventHandler的定义是:

public delegate void MouseEventHandler(object sender, MouseEventArgs e);

该语句定义了一个名为MouseEventHandler的委托。

所以根据这段代码能够大致猜想其执行过程:

将对象发送过来的消息从应用程序消息队列中提取出来后,分发到相应的窗体,并转换成事件。NET框架定义了一个特殊的类型(Delegate委托),该类型提供函数指针的功能。这样,委托就等效于一个类型安全的函数指针或一个回调函数。C#中通过Delegate委托机制将事件与响应函数的函数地址关联起来,并形成一种函数指针列表,当消息到来的时候,即可通过这些函数指针列表逐一调用这些响应函数。我们通过以下方法自定义一个事件触发,来验证我们以上的猜测。我们通过手动添加代码来实现自定义的代理事件(同VC++中的自定义消息)。

其具体实现为:

在usercontrol.cs中定义一个委托,然后在FORM中为这个委托加函数。

比如,在Usercontrol中定义一个Usercontrol中先定义一个委托:

 public event Action btnClick;

然后在Form中对这个btnClick添加一个函数:

us1.btnClick += new Action(us1_btnClickEvent);

接着在Form中定义这个函数:

private void us1_btnClickEvent(string obj)
 {
            us2.textBox1.Text = obj;
 }

这个时候btnclick就相当于us1_btnClickEvent了。

然后对于usercontrol中的button1_Click程序:

public  void button1_Click(object sender, EventArgs e)
        {
            btnClick("123456");
        }

就相当于:

public  void button1_Click(object sender, EventArgs e)
        {
            Usercontrol("123456");
        }

C# Action 定义委托有什么优点?

Action委托没有什么特殊的,它相当于你定义这样一个委托:void delegate MyDelegate(); 无参数无返回值。

只不过就是系统预先定义了一组委托类型,直接使用罢了,如果没有也只需要一行或几行代码就可替代了。所以Action就是定义好的委托 。

 

 

 

 

 

 

 

 

你可能感兴趣的:(c#)