马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

用户控件事件为null问题

  [复制链接]
查看7593 | 回复6 | 2014-6-20 11:53:07 | 显示全部楼层 |阅读模式
ascx页面
public delegate void AddClickHandler(object sender, AddEventArgs e); //定义添加按钮委托
        public event AddClickHandler AddClick;//定义事件
protected void btnBindBandCard_Click(object sender, EventArgs e)
        {
            try
            {               
              AddEventArgs addEvent = new AddEventArgs();
                addEvent.IsSuccess = true;
                if(AddClick !=null)这块总是为null,求解
                {
                    AddClick(sender, addEvent);
                }

            }
            catch(Exception ex)
            {
                AddEventArgs addEvent = new AddEventArgs();
                addEvent.IsSuccess = false;

            }
        }

public class AddEventArgs : EventArgs
    {
        bool isSuccess;

        public bool IsSuccess
        {
            get { return isSuccess; }
            set { isSuccess = value; }
        }


    }
aspx页面
       if(!IsPostBack)
            {
                        bandCard.AddClick += bandCard_AddClick;
            }


        void bandCard_AddClick(object sender, Common.Ascx.AddEventArgs e)
        {
            if (e.IsSuccess)
            {
                Response.Write("成功");
            }
            else
            {
                Response.Write("失败");
            }
        }

songyusb | 2014-6-20 11:55:01 | 显示全部楼层
我是路过的酱油哥~
ibcadmin | 2014-6-20 12:04:21 | 显示全部楼层
给你两个例子你看下,  你把ispostback去掉试一下, 为空多部分表示页面回传的问题。
例子一:
[C#] 纯文本查看 复制代码
//声明事件委托
     public delegate void ToolClickEventHandler(Object sender, EventArgs e);
     //定义事件
     public event ToolClickEventHandler ToolBtnClick;
     //监视事件
     protected void OnToolClick(Object sender, EventArgs e)
     {
         if (ToolBtnClick != null)
         {
             ToolBtnClick(sender, e);
         }
     }
     private static System.Web.UI.WebControls.Button New;
     protected void Page_Load(object sender, EventArgs e)
     {
         if (!IsPostBack)
         {
             for (int i = 0; i < btnNum; i++)
             {    
                 New = new Button();
                 New.Text = arrayBtnText[i];
                 New.ID = "btnNew"+i.ToString();
                 //页面回传时点击事件委托无效
                 //New.Click += new System.EventHandler(btnNew_Click);
                 //动态产生的按钮,页面不能保存他的状态,页面回传时就没有了,缓存起来,页面回传时重新加载
                 if(btnCssClass!=null)
                 {
                     New.CssClass = btnCssClass;
                 }
                 Cache["New"+i.ToString()] = New;         
             }
         }
         if (panelCssClass != null)
         {
             Panel1.CssClass = panelCssClass;
         }
         Panel1.Controls.Clear();
         for (int j = 0; j < btnNum;j++ )
             if (Cache["New" + j.ToString()] != null)
             {
                 Button old = (Button)Cache["New" + j.ToString()];
                 //一下这两个属性本应该是在具体应用程序中去设置,但因为这两个按钮的这两个属性具有一般性
                 //所以就在这里进行设置
                 if (old.Text != "提交" && old.Text != "保存")
                 {
                     old.CausesValidation = false;
                 }
                 if (old.Text == "删除" || old.Text=="清除")
                 {
                     old.Attributes.Add("onclick", "javascript:return confirm('Are you sure to delete?');");
                 }
                 old.Click += new System.EventHandler(btnNew_Click);
                 Panel1.Controls.Add((Control)Cache["New" + j.ToString()]);
             }
     }
     public void btnNew_Click(Object sender, EventArgs e)
     {
         //Button btn = (Button)sender;
         //str = btn.ID;
         //Response.Write("<script>alert('"+str+"')</script>");
         OnToolClick(sender, e);
     }


例子二:
[C#] 纯文本查看 复制代码
using System;

public class MyClass
{

public static void Main()
{

PrintStr myPrinter = new PrintStr();

PrintHandler myHandler = null;

myHandler += new PrintHandler(myPrinter.CallPrint); // 将委托链接到方法,来实例化委托

if(myHandler!=null)

myHandler("Hello World!"); // 调用委托,相当于匿名调用委托所链接的方法

Console.Read();

}

}



public delegate void PrintHandler(string str); // 声明委托类型

public class PrintStr
{

public void CallPrint(string input)

{

Console.WriteLine(input);

}

} 


有问题再跟帖

C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
阿甘大手 | 2014-6-20 13:22:09 | 显示全部楼层
顶楼上
sherlockhomles | 2014-6-20 13:25:54 | 显示全部楼层
ibcadmin 发表于 2014-6-20 12:04
给你两个例子你看下,  你把ispostback去掉试一下, 为空多部分表示页面回传的问题。
例子一:
[mw_shl_c ...

大神,膜拜,已解决
ibcadmin | 2014-6-20 19:45:50 | 显示全部楼层

C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
ibcadmin | 2014-6-21 08:54:35 | 显示全部楼层

希望多多支持网站
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则