问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

asp.net 自定义控件

发布网友 发布时间:2022-05-11 12:09

我来回答

2个回答

热心网友 时间:2022-04-27 09:35

先贴源代码~一会再解释~

新建一个类库/服务器控件项目,添加TextBox.cs文件,复制以下代码~
TextBox.cs

using System.Collections.Specialized;

namespace MyControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:TextBox runat=server></{0}:TextBox>")]
public class TextBox : WebControl,IPostBackDataHandler
{
#region //event
public event EventHandler TextChanged;
#endregion

#region //Properties
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? "" : s);
}
set
{
ViewState["Text"] = value;
}
}
#endregion

#region //Render Engine
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Input;
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);
base.AddAttributesToRender(writer);
}
#endregion

#region //realize the interface IPostBackDataHandler
public bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
if (postCollection[postDataKey] != Text)
{
Text = postCollection[postDataKey];
return true;
}
return false;
}

public void RaisePostDataChangedEvent()
{
if (TextChanged != null)
TextChanged(this, EventArgs.Empty);
}
#endregion
}
}

测试自定义控件的步骤:
右键项目,选择【生成】

新建一个网站,新建/Bin目录,右键【添加引用】,导航到上一个新建的项目的.ddl文件。

default.aspx的源代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register Assembly="MyControl" Namespace="MyControl" TagPrefix="lark" %>

<!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>
<lark:TextBox runat="server" ID="tbInput" OnTextChanged="tbInput_TextChanged"></lark:TextBox>
<asp:Button ID="btnSubmit" runat="server" Text="提交" />
<asp:Label ID="lblShowInput" runat="server" ></asp:Label>
</div>
</form>
</body>
</html>

default.aspx.cs
protected void tbInput_TextChanged(object sender,EventArgs e)
{
lblShowInput.Text = "您输入的是:" + tbInput.Text;
}

==============源代码部分(完)===================

下面随便解释下源代码哈~
1。自定义控件其实就是个类,该类继承自WebControl类,同时实现IPostBackDataHandler接口~
2。添加自定义属性Text,并将之存储在控件的ViewState集合中~
3。添加自定义事件TextChanged
4。编写控件的生成引擎:
重写TagKey属性为INPUT,以修改外围标记
重写AddAttributeToRender()方法,为外围标记<input/>添加type value name属性。

5。实现IPostBackDataHandler接口的两个方法:
LoadPostData():接收投递的表单值,用于更新Text属性值。若属性值变化,返回true,自动调用RaisePostDataChangedEvent()方法。
RaisePostDataChangedEvent()方法中激活TextChanged事件~

以上~

自定义控件是ASP.NET中比较难懂的概念了~但是一旦掌握了的话,对之前ASP.NET的许多知识点都会有质的飞跃哦~

热心网友 时间:2022-04-27 10:53

Textbox box=new Textbox(....);
box.size();
box.visiable=true;
....
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
不想要淘宝原来的帐号,怎么办,可以注销吗~谢谢了,大神帮忙啊 蓝宝石HD6770显卡求鉴定,GPUZ检测数据如下: 健身60公斤,176身高的人,比较瘦,是不是即便经常锻炼,力气也不一定比胳膊... 农村土地什么情况不予发证?如何解决? 共工治水在前还是怒触不周山在前? 共工触山的故事 有什么类似漂流瓶的软件推荐 漂流瓶软件推荐 保险柜密码怎么改 保险柜密码正确但是打不开怎么办 西安水多少钱一顿 西安哪里可以买自来水 高手进、、、.net mvc3.0中对表单的描述(如:一个文本框,后面跟着简单的... 骆冰传。。 怎样用asp.net在后台 实现自定义字段(也就是用户可以添加或删除数据表中的字段), 谁能给出asp.net的form表单传值用法的例子? 骆冰吟传全文txt,有的私信 骆冰莹传 我在淘宝设置了自己的昵称,请问如果买东西时和卖家联系的话,那边显示的是淘宝会员名还是我的昵称? 速达3000.net自定义报表方案保存后预览是空白表格,没有数据 淘宝我就知道自己的会员名其它都不知道了怎么办? asp.net 请教如何在页面制作一个可以自动添加新行的表格? 退货时要填自己的淘宝账号、在哪里看得到、就是自己的会员名吗 我是用会员名注册的淘宝网,不知道自己的淘宝帐号是不是会员名,急求答案。 asp.net能不能实现用户自定义样式的表格 .NET里怎么才能自定义格式表格 .NET,如何实现用户自定义一张数据表之后,能自动生成对应该表的一个具有增删查改的模块,求实现思路? ASP.NET如何实现一些比较精美的表格?(自定义) Sql Server 2000,Sql,JS,.net, 金和OA-C63.0,自定义表单设计平台:Eform 空置的商铺或在出租的商铺如果没有缴纳房产税(租赁税),在出售过户时会被一次性收取吗? 商铺出租要交税吗, 自己的门面自己经营要交税吗 2022年土耳其移民政策是有变化吗?有提前信息吗? 有骆冰传第三部吗? 土耳其移民政策 谁给个《骆冰传》下载地址 求本书叫骆冰传.. 谁有骆冰传或夫 妇乐 园的txt文件请发我网盘 土耳其移民护照有那些利弊? 消防兵属于陆兵吗陆兵包括哪些兵? 我很想当消防兵,可的别人都说消防兵很累,消防兵没有假期,您能告诉我有关消防兵的资料吗? 视频短号不能保存 百度有钱花提前还款,在借审核不通过是怎么回事。要多久可以借出来呢。有遇到同样问题的嘛。朋友 应用程序出错,IE出错 急:关于EXPLORER (IE浏览器) 浏览器兼容性问题,DIV+CSS的 IE的问题 浏览器兼容性问题,Webkit内核显示多出了三行,应该怎么修改? IE浏览器中毒了 have had to/have to have had to一般疑问句 英语,have better do 和 had better do有什么区别?have to do 和 had to do 有什么区别?