惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LINUX DO - 热门话题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Project Zero
Project Zero
V
Vulnerabilities – Threatpost
Cisco Talos Blog
Cisco Talos Blog
P
Palo Alto Networks Blog
C
Cisco Blogs
A
Arctic Wolf
月光博客
月光博客
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
量子位
小众软件
小众软件
Latest news
Latest news
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
N
Netflix TechBlog - Medium
K
Kaspersky official blog
人人都是产品经理
人人都是产品经理
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
Y
Y Combinator Blog
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
S
Schneier on Security
D
Docker
Scott Helme
Scott Helme
MyScale Blog
MyScale Blog
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
GbyAI
GbyAI
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
H
Help Net Security
Simon Willison's Weblog
Simon Willison's Weblog
J
Java Code Geeks
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tenable Blog
B
Blog
Know Your Adversary
Know Your Adversary
IT之家
IT之家

博客园 - 莫相会

ASP.NET数据绑定表达式语法 微软Office Live WorkSpace正式向全球用户开放 Google Talk的小徽章Chatback 使用UpdatePanel时脚本错误sys 未定义的解决办法 - 莫相会 - 博客园 用户定义函数建议 SQL SERVER临时表的使用 Active Report for .net"在VS中正常显示在IIS中无法显示"的问题之解决办法 二级联动 SQL匹配 Visual Studio 快捷键收藏 在Source Safe 采用tag XtraGrid如何合并列或横向合并单元格? 关于WebService传输对象数组的问题 SQL Server2000中死锁经验总结 《个人信息管理器》C#源代码下载 sql server数据库定时自动备份 VSS(Visual SourceSafe)使用入门 MDI程序中反射生成菜单并与权限控制的结合(利用XML将模块组件装配与卸载) 《设计模式迷你手册》与《C#设计模式》下载
创建服务器控件
莫相会 · 2007-02-07 · via 博客园 - 莫相会

1.         定义属性

publicProperty将在设计时控件的属性窗口中显示,添加各种类型的Attribute可以影响属性的展现形式和持久化形式。

         BrowsableAttribute:指定一个属性或事件是否应显示在属性窗口中;

        CategoryAttribute应用到属性或事件,指定属性或事件在属性浏览器中列出时所处的类别;

         DescriptionAttribute应用于属性或事件,指定在属性浏览器中显示的对属性或事件的说明。

         DesignOnlyAttribute应用于属性,指定是否只能在设计时设置属性。

         ReadOnlyAttribute应用于属性,指定在设计时属性是只读还是可读/写。

         BindableAttribute确定属性是否适合数据绑定器进行绑定

         PersistenceModeAttribute:定义指定如何将 ASP.NET 服务器控件属性或事件保持到 ASP.NET 页的元数据属性。InnerProperty:指定属性作为服务器控件的开始和结束标记内部的嵌套标记保持。如下面例中的HeaderStyle

         DesignerSerializationVisibilityAttribute:指定在设计时序列化组件上的属性时所使用的持久性类型。Content:代码生成器产生对象内容的代码,而不是对象本身的代码。Hidden:代码生成器不生成对象的代码。Visible:代码生成器生成对象的代码。如下面例中的TableStyle

<cc1:exrepeater id="ExRepeater1" runat="server" TableStyle-BorderStyle="Dotted">
       <HeaderStyle BackColor="#C0C0FF"></HeaderStyle>
</cc1:exrepeater>

         NotifyParentPropertyAttribute:指示当此属性应用到的属性的值被修改时将通知父属性。如果属性的父属性应该在该属性值更改时接到通知,则向该属性应用 NotifyParentPropertyAttribute

         MergablePropertyAttribute:在属性浏览器中当多个组件被浏览和选中时,允许或阻止包含某属性。

         DesignTimeVisibleAttribute:是否在设计器上显示该组件。

         ToolboxItemAttribute:是否在工具箱中显示该组件,或指定显示的工具箱名称/类型。

2.         呈现服务器控件

         重写 Render 以将 HTML(或其他标记内容)作为字符串参数传递到 HtmlTextWriter 的实例的 Write 方法。Control 基类提供 RenderChildren 方法以从其子控件(如果有)呈现内容。

         System.Web.UI.WebControls.WebControl 类还提供其他几个方法来便于呈现:AddAttributesToRender 方法添加需要呈现的 HTML 属性和样式;
RenderBeginTag
RenderEndTag 方法重写开始和结束 HTML 元素标记;
RenderContents
方法指定标记内的内容。

         ISite.DesignMode 属性:确定组件在由类实现时是否处于设计模式。实际使用时用
if ( (this.Page != null) && (this.Page.Site != null) && this.Page.Site.DesignMode )
判断

3.         定义事件

  定义保存事件数据的类,继承System.EventArgs(在控件之外定义);

  定义事件委托,继承System.EventHandler(在控件之外定义);

  在控件中定义的事件成员。该成员由 event 关键字标识

  调用委托的控件中的方法(例如:OnClickOnTextChanged)。

4.         生成和捕获回发事件

  控件实现IPostBackEventHandler接口,允许控件在服务器上引发事件来响应来自客户端的回发。

  生成:用方法PageGetPostBackClientHyperlink生成服务器回发事件的超链接。参数为处理回发的服务器控件和传递给服务器控件的参数。
  捕获:在控件的IPostBackEventHandler.RaisePostBackEvent方法中处理回发事件。

5.         开发复合控件

         INamingContainer:标记接口,为每个子服务器控件创建新 ID 命名空间 

      使用 CreateChildControls创建子控件

         事件冒泡的技术,允许子控件将事件沿其包容层次结构向上传播。RaiseBubbleEvent 沿层次结构向上将事件数据发送到控件的父级。若要处理或引发冒泡的事件,控件必须重写 OnBubbleEvent方法。

6.         类型转换

  TypeConverterAttribute指定用作此特性所绑定到的对象的转换器的类型。带有该属性的类可以保存在ViewState中。给属性添加Attribute[TypeConverter(typeof(CustomerConverter))]。用于转换的类必须从 TypeConverter 继承。简单定义可重写以下方法:CanConvertFromCanConvertToConvertFrom ConvertTo

7.         属性的编辑器

  要自动运用集合编辑器。属性的类型必须实现Llist接口,并定义好AddDelete方法,方法的参数须声明为正确的类型。

自定义设计时 UI 类型编辑器:

         使用EditorAttribute指定用来更改属性的编辑器。给属性添加Attribute[EditorAttribute(typeof(CustomerEditor), typeof(System.Drawing.Design.UITypeEditor))]

         定义一个从 System.Drawing.Design.UITypeEditor 派生的类。

         重写 EditValue 方法以处理用户界面、用户输入操作以及值的分配。用provider.GetService(typeof(IWindowsFormsEditorService))得到显示 Windows 窗体,或者在设计模式下在属性网格控件的下拉区域中显示控件的IWindowsFormsEditorServiceCloseDropDown关闭所有以前打开的下拉控件区域。DropDownControl在提供此服务的属性网格的值字段下方的下拉区域中显示指定控件。ShowDialog显示指定的Form

         重写 GetEditStyle 方法,将编辑器将使用的编辑器样式的类型通知给“属性”窗口。返回值为UITypeEditorEditStyle
DropDown
:显示向下箭头按钮,而且该用户界面将在一个下拉对话框中承载。
Modal
:显示省略号 (...) 按钮,该按钮用于启动模式对话框或有窗口的对话框。
None
:不提供任何交互用户界面 (UI) 组件。

SDK: ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/cpconservercontrolssamples.htm

转自:http://blog.csdn.net/youyousj/archive/2007/01/22/1490264.aspx