猿问

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

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;这一句有可以,、为什么啊???

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

慕标5832272
浏览 440回答 7
7回答

繁星coding

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

湖上湖

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

斯蒂芬大帝

我想问下,此段代码 public event EventHandler ClickEventHandler;    protected void Button1_Click(object sender, EventArgs e)     {         if (ClickEventHandler != null)         {             ClickEventHandler(this, EventArgs.Empty);         }     } 在上下文中,究竟起了什么作用,需要的这段代码吗?这是一个教人如何使用用户控件的列子,没有 其他代码了

天涯尽头无女友

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

慕雪6442864

按我的思路去思考: 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的点击去驱动这个事件发生) 现在,明白了吧。
随时随地看视频慕课网APP
我要回答