首页 新闻 会员 周边 捐助

事件委托的,与他们的触发关系,请求大家指导,在此谢过大家了

0
悬赏园豆:10 [已解决问题] 解决于 2012-08-12 22:16

public event EventHandler ClickEventHandler;
    protected void Button1_Click(object sender, EventArgs e)
     {
         if (ClickEventHandler != null)
         {
             ClickEventHandler(this, EventArgs.Empty);
         }

     }
问题1:请问这个事件ClickEventHandler什么都没绑定,我想说的是:委托事件里连一个方法都没有声明和绑定,但我们点击触发 Button1_Click时,此段代码



         if (ClickEventHandler != null)
         {
             ClickEventHandler(this, EventArgs.Empty);
         }
】如何运行啊,事件是点击了botton1按钮,什么反应也没有,在上下文中,究竟起了什么作用,这神来之笔,对于上下文究竟起什么作用,?????不会做做样子,可要可无的吗,需要的这段代码吗?

问题2: ClickEventHandler(this, EventArgs.Empty);怎么还有传入空参数EventArgs.Empty啊,那不写,就是传入空参数,还是说EventArgs.Empty传入的参数是有值的(下面还有个问题3,麻烦了)


注意:地处的代码是创建(用户控件)的关于委托事件的代码
完整的代码如下
  MyControl.ascx的代码
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MyControl.ascx.cs" Inherits="MyControl" %>
<asp:TextBox ID="TextBox1" runat="server" Width="193px">请输入搜索内容</asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="搜索" onclick="Button1_Click" />



MyControl.ascx.cs后置代码
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class MyControl : System.Web.UI.UserControl
{
     protected void Page_Load(object sender, EventArgs e)
     {

     }
     public string FindText
     {
         get { return TextBox1.Text; }
         set { TextBox1.Text = value; }
     }
     public event EventHandler ClickEventHandler;
    protected void Button1_Click(object sender, EventArgs e)
     {
         if (ClickEventHandler != null)
         {
             ClickEventHandler(this, EventArgs.Empty);
         }

     }
}

我用来测试UserMyControl.aspx的页面代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UseLMyControl.aspx.cs" Inherits="UseLMyControl" %>

<%@ Register src="MyControl.ascx" tagname="MyControl" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">    

<title>无标题页</title>

</head>

<body>    

<form id="form1" runat="server">    

<div>     <uc1:MyControl ID="MyControl1" runat="server" OnClickEventHandler="MyControl1_Click"/>      

<br />         <asp:Label ID="Label1" runat="server" Text="什么情况"></asp:Label>    

</div>   

  </form>

</body>

</html>

UserMyControl.aspx.cs的后置代码

using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq;

public partial class UseLMyControl : System.Web.UI.Page

{     protected void Page_Load(object sender, EventArgs e)   

  {

    }    

public void MyControl1_Click(object sender, EventArgs e)   

  {         Label1.Text = MyControl1.FindText;     }

}

 

问题3:好像删除了这段代码

public event EventHandler ClickEventHandler;
    protected void Button1_Click(object sender, EventArgs e)
     {
         if (ClickEventHandler != null)
         {
             ClickEventHandler(this, EventArgs.Empty);
         }

     }

也不行,请问什么原因,只要不删除public event EventHandler ClickEventHandler;这一句有可以,、为什么啊???

这是一个教人如何使用用户控件的列子,没有其他代码了,希望大家别把问题复杂化,我没有其他代码要交代,也不会有声明在其他地方的可能

黑夜猫头鹰的主页 黑夜猫头鹰 | 初学一级 | 园豆:3
提问于:2012-07-19 10:49
< >
分享
最佳答案
0

按我的思路去思考:

1,一个控件,是否存在于一个类里面?(答案:是)

2,一个控件,在一个类里面默认是public吗?(答案:不是)

3,那如果这个控件是一个button(比如它就是搜索),那它点了以后,想一个这是百度的页面(如果叫baidu.aspx.cs),搜索框与button是一个控件(比如是uc.cs),那么一个baidu.aspx.cs类能直接感应到button的点击吗?(答:不能,因为只有uc.cs才知道有这个button)

4,如果想让baidu.aspx.cs知道uc.cs的button呢?(答:当然是us.cs得有一个public的事件,然后baidu.aspx.cs定阅)

5,那这个public 的事件什么时候驱动它发生呢?(答:当然于button的点击去驱动这个事件发生)

现在,明白了吧。

收获园豆:6
幽灵~ | 菜鸟二级 |园豆:268 | 2012-07-19 14:59

请问你回答的是哪一个问?,我不知道你要解答我那个问题呢?你是回答这一段代码原理吗?

  public event EventHandler ClickEventHandler;
    protected void Button1_Click(object sender, EventArgs e)
     {
         if (ClickEventHandler != null)
         {
             ClickEventHandler(this, EventArgs.Empty);
         }

     }

以及 protected void Button1_Click(object sender, EventArgs e)对public void MyControl1_Click(object sender, EventArgs e)   的影响吗?因为MyControl1由一个textbox和一个botton组成,MyControl1根本就不是一个button按钮,本来是没有click事件的,但是由于MyControl1控件有botton按钮组成,所以MyControl1控件的click事件,就由其botton组件实现?

麻烦,能讲更直白行吗?把指代关系,写清楚,我不太清楚,你说的那些话,有点搞不清楚,麻烦了

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-07-20 22:22

@黑夜猫头鹰: 

public event EventHandler ClickEventHandler;这号是为了调用控件的页面能知道这个控件的button被点了

if (ClickEventHandler != null);这句是防御式编程,换成汉语来说是:如果有定阅了本事件

ClickEventHandler(this, EventArgs.Empty); 这句话是触发这个事件。

EventArgs.Empty;这句没有意义,就如同我本人爱写 new EventArgs()或null

 public string FindText
     {
         get { return TextBox1.Text; }
         set { TextBox1.Text = value; }
     }

这一大段是为了认调用它的页面知道这个控件的文本框中的内容。

幽灵~ | 园豆:268 (菜鸟二级) | 2012-07-23 08:27
其他回答(2)
0

这里是用户控件,ClickEventHandler的实现应该是在使用此控件的页面中的,你查找一下试试

收获园豆:2
artwl | 园豆:16736 (专家六级) | 2012-07-19 10:53

谢了

不过,我已经将,所有的代码都附上了,我的疑惑就是怎么不用对ClickEventHandler的实现进行声明

支持(0) 反对(0) 黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-07-19 13:17
0

应该是在页面中注册了事件,关于 EventArgs 这个,你可以直接传入null,主要看你 ,有没有 在事件中用到EventArgs 中的数值,如果有,就需要传入,如果没有,就是null。

收获园豆:2
無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-19 10:57

我想问下,此段代码

public event EventHandler ClickEventHandler;
    protected void Button1_Click(object sender, EventArgs e)
     {
         if (ClickEventHandler != null)
         {
             ClickEventHandler(this, EventArgs.Empty);
         }

     }

在上下文中,究竟起了什么作用,需要的这段代码吗?这是一个教人如何使用用户控件的列子,没有

其他代码了

支持(0) 反对(0) 黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-07-19 13:24

@黑夜猫头鹰: 这段 代码 就是调用事件的程序。事件的实现 代码 在其他地方实现了。

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-19 16:00

@黑夜猫头鹰: 你是说 ClickEventHandler(this, EventArgs.Empty);的参数EventArgs.Empty的作用是它既可以不传入参数,也可以传入参数,起到随机应变的作用吗?不同于一般的参数,有了形参,在调用时必须传入实参的方法吗?这起到,我们ClickEventHandler(this, EventArgs.Empty)时间,绑定的方法既可以是方法  void example1(int  a)和方法  void example2(int  a,string   b)吗?(这两个方法是我意淫的,也许参数的类型不对,但我想说明的是参数的个数,是否可以使用一个参数,或者是2参数,来说明EventArgs.Empty的用处

谢谢你無限遐想 大哥,每次都看到你

 

支持(0) 反对(0) 黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-07-20 22:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册