在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
之前一直写MVC的,本来就不大喜欢.NET中的服务器控件,里面的缺点很多,但有时候用起来方便,而且现在的项目开发中也要用到。 所以就找了好多资料来看一下,现在做一下记录。 下面给出例子,一个用户登陆的用户控件,里面外加了个自定义事件按钮。 用户控件效果图:
给出用户控件中的代码 代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Dome { //声明一个委托 public delegate void ClickEventHandler(object sender, EventArgs e); public partial class Login : System.Web.UI.UserControl { public string UserName { get { return txtUserName.Text; } set { txtUserName.Text = value; } } public string PassWord { get { return txtPassWord.Text; } set { txtPassWord.Text = value; } } //可用按钮 public Button LoginButton { get { return this.SubmitLogin; } set { this.SubmitLogin = value; } } protected void Page_Load(object sender, EventArgs e) { //加载方法 test(); } //可用方法 public void test() { Response.Write("方法输出<br>"); } protected void SubmitLogin_Click(object sender, EventArgs e) { Response.Write("登陆原有事件<br>"); } //声明单击事件 public event ClickEventHandler Click; //判断事件是否被订阅 protected void OnClick(EventArgs e) { if (Click != null) Click(this, e); } protected void SubmitLogin0_Click(object sender, EventArgs e) { Response.Write("用户自定义控件原来的!<br>"); //调用事件 this.OnClick(e); } } }
下面是引用页面的代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Dome.WebForm1" %> <%@ Register src="Controls/Login.ascx" tagname="Login" 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:Login ID="Login1" runat="server" /> </div> </form> </body> </html> 后台代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Dome { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Login1.UserName = "test"; Login1.PassWord = "psss"; //取公有可用的事件 Login1.LoginButton.Click += new EventHandler(LoginButton_Click); //自定义事件 Login1.Click += new ClickEventHandler(Login1_Click); } void Login1_Click(object sender, EventArgs e) { Response.Write("用户自定义控件事件测试<br>"); } void LoginButton_Click(object sender, EventArgs e) { Response.Write("重定义单击事件"); } } }
1、 用户控件中属性 这个属性就比较方便了。只要你能把用户控件也看着是一个类,那他里面就可以设置属性,有属性就可以在调用时用到。 看了上面的代码相信大家也能明白属性是如何用了。 2、用户控件中方法
//可用方法 public void test() { Response.Write("方法输出<br>"); }
上面的方法只要声明为公有的,在引用用户控件时就可以用了。想要在用户控件中用这个方法就在Page_Load中引用test();就可以了。 其它上面的属性和方法都比较好理解 3、用户控件中的事件,有两种方法去写 1、第一个就是如上面的例子中的登陆按钮,定义一个Button属性,这样就可以在引用用户控件时来委托一个事件了。
//可用按钮 public Button LoginButton { get { return this.SubmitLogin; } set { this.SubmitLogin = value; } }
调用时如上面的引用页的后台代码,这里就不提出来了。 2、自己声明用委托来声明一个事件 在网上看一到一个关于委托与事件区别的例子,自己感觉不错。这里拿出来给大家看一下。 比如说一个公司(场景),你是老板,手下有两个员工,小张和小王。 你命令小王,如果小张玩游戏,则小王扣去小张500元钱。 这就是现实中的委托。 实际上,在写程序中,程序员就是老板,小张和小王就是两个对象。小张玩游戏是一个方法,小张还有一个游戏事件,他玩游戏激发这个事件。 而小王就是事件处理对象,他负责把小张的钱扣除500。 所以,委托有如下几个要素: 1 激发事件的对象--就是小张 2 处理对象事件的对象--就是小王 3 定义委托,就是你让小王监视小张。 如果这三个要素都满足的话,则你就写出了一个完整事件的处理。 这样你再对比一下上面的代码来看一下,是否会更好理解。 最好给出最终的两个效果图 1、单击登陆按钮时的效果图, 输出了方法的文字和属性,还有,事件原来的文字和委托后的文字
2、单击自定义控件效果图
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论