C# 委托和事件

委托:

它是一种数据类型,和引用类型类似,不过和一般的类相比,委托的实例不是在堆中的数据,而是一个方法。

和C++中的函数指针很相似,但对函数指针更安全,。将函数打包成一个变量进行传递。

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法


事件:

事件实现了对委托的封装,是一个特殊的委托

下面看一下代码(一个分页功能):

下面是用户控件的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public delegate void PageChangeHandler(int nPageIndex);
public partial class Common_PagerControl : System.Web.UI.UserControl
{


    public event PageChangeHandler OnPageChange;
    private int _PageCount = 0;//页数
    private int _RecordCount = 0;//数量
    private int _PageIndex = 1;//当前页数
    protected void Page_Load(object sender, EventArgs e)
    {

    }


    //总页数
    public int PageCount
    {
        get
        {
            return int.Parse(this.LblPageCount.Text);
        }
        set
        {
            _PageCount = value;
            /*
            if (_PageCount < 2)
            {
                //this.txtNewPageIndex.Enabled = false;
                //this.LnkBtnGoto.Enabled = false;
            }
            else
            {
                //this.txtNewPageIndex.Enabled = true;
                //this.LnkBtnGoto.Enabled = true;
            }
             */
            this.LblPageCount.Text = _PageCount.ToString();
        }
    }
    //总条数
    public int RecordCount
    {
        get
        {
            return int.Parse(this.LblRecordCount.Text);
        }
        set
        {
            _RecordCount = value;
            this.LblRecordCount.Text = _RecordCount.ToString();
        }
    }

    //当前第几页
    public int PageIndex
    {
        get
        {
            return int.Parse(this.LblPageIndex.Text);
        }
        set
        {
            _PageIndex = value;
            this.txtNewPageIndex.Text = this.LblPageIndex.Text = _PageIndex.ToString();
            if (_PageIndex < 2)
            {
                this.LnkBtnFirst.Enabled = false;
                this.LnkBtnPrevious.Enabled = false;
            }
            else
            {
                this.LnkBtnFirst.Enabled = true;
                this.LnkBtnPrevious.Enabled = true;
            }
            if (_PageIndex >= _PageCount)
            {
                this.LnkBtnNext.Enabled = false;
                this.LnkBtnLast.Enabled = false;
            }
            else
            {
                this.LnkBtnNext.Enabled = true;
                this.LnkBtnLast.Enabled = true;
            }
        }
    }
    //第一页
    protected void LnkBtnFirst_Click(object sender, EventArgs e)
    {
        try
        {
            OnPageChange(1);
        }
        catch { }
    }
    //上一页
    protected void LnkBtnPrevious_Click(object sender, EventArgs e)
    {
        try
        {
            int n = Convert.ToInt32(this.LblPageIndex.Text);//当前的页数
            n--;
            if (n > 0)
            {
                OnPageChange(n);
            }
        }
        catch
        {
            throw;
        }
    }
    //下一页
    protected void LnkBtnNext_Click(object sender, EventArgs e)
    {
        try
        {
            int n = Convert.ToInt32(this.LblPageIndex.Text);
            n++;
            if (n <= Convert.ToInt32(this.LblPageCount.Text))
            {
                OnPageChange(n);
            }
        }
        catch (Exception ex)
        {
            throw (ex);
        }
    }
    //最后一页
    protected void LnkBtnLast_Click(object sender, EventArgs e)
    {
        try
        {
            int n = Convert.ToInt32(this.LblPageCount.Text);
            OnPageChange(n);
        }
        catch
        {
            throw;
        }
    }
    //跳到指定页
    protected void LnkBtnGoto_Click(object sender, EventArgs e)
    {
        int n;
        try
        {
            n = Convert.ToInt32(this.txtNewPageIndex.Text);
        }
        catch
        {
            n = Convert.ToInt32(this.LblPageIndex.Text);
        }
        int np = Convert.ToInt32(this.LblPageCount.Text.Trim());
        if (n > np)
            n = np;
        if (n < 1)
            n = 1;
        OnPageChange(n);
    }


}

下面是页面引用代码:

页面:

<%@ Register Src="../../Common/PagerControl.ascx" TagName="PagerControl" TagPrefix="uc1" %>
 <tr align="right" bgcolor="#f9fcef">
                    <td height="36" colspan="13" align="middle">
                        <%--<div class="pagelistbox" runat="server" id="ddpagelist" name="ddpagelist">
                            
                        </div>--%>
                        <uc1:PagerControl ID="PagerControl1" runat="server" />
                    </td>
                </tr>

后台:

 protected void Page_Load(object sender, EventArgs e)
    {      //给分页控件注册的事件
        this.PagerControl1.OnPageChange += new PageChangeHandler(PageNavigator1_PageChange);
        if (!IsPostBack)
        {

          
            ListDataBind(1);



        }


    }
 /// <summary>
    /// 给分页控件注册的事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="PageIndex">当前页</param>
    protected void PageNavigator1_PageChange(int PageIndex)
    {
        ListDataBind(PageIndex);
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值