[导入][ASP.NET 控件实作 Day21] 实作控件智能卷标
2008-10-23 00:38
423 查看
控件通常会把常用属性或功能显示在智能卷标中,提供使用者更简便的快速设定,例如下图为GridView的智能。若要制作控件的智能卷标,需实作控件的ActionList加入智能卷标中要显示的项目,在本文将以TDateEdit控件为例,进一步说明控件的智能卷标的实作方式。
程序代码下载:ASP.NETServerControl-Day21.rar
一、TDateEdit控件介绍TDateEdit控件是笔者之前在部落格中实作的一个日期控件,如下图所示。它是结合JavaScript的TheCoolestDHTMLCalendar日期选择器实作的控件,我已将TDateEdit控件的相关程序代码含入Bee.Web.dll组件中。TDateEdit控件的相关细节可以参考笔者部落格下面几篇文章有进一步说明,本文将以TDateEdit控件为例,只针对实作智能标签的部分做进一步说明。日期控件实作教学(1)-结合JavaScript
日期控件实作教学(2)-PostBack与事件
TBDateEdit日期控件-1.0.0.0版(OpenSource)
二、控件加入智能卷标控件要加入智能卷标要实作控件的Designer,我们继承ControlDesigner命名为TBDateEditDesigner,然后覆写ActionLists属性,此属性即是传回智能卷标中所包含的项目清单集合。在ActionLists属性中一般会先加入父类别的ActionLists属性,再加入自订的ActionList类别,这样才可以保留原父类别中智能卷标的项目清单。
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
我们自订的ActionList为TBDateEditActionList类别,它在智能卷标呈现的项目清单如下图所示,接下去我们会说明TBDateEditActionList类别的内容。
三、自订智能卷标面板的项目清单集合
DesignerActionList类别定义用于建立智能卷标面板的项目清单的基底类别,所以我们首先继承DesignerActionList命名为TBDateEditActionList。
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
接下来要覆写GetSortedActionItems方法,它会回传DesignerActionItemCollection集合型别,此集合中会传回要显示在智能卷标面板的项目清单集合,所以我们要在DesignerActionItemCollection集合中加入我们要呈现的项目清单内容。
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
step1.在智能卷标面板加入静态标题项目
首先介绍DesignerActionHeaderItem类别,它是设定静态标题项目,例如我们在TDateEdit的智能标签中加入「行为」、「外观」二个标题项目,其中DesignerActionHeaderItem建构函式的category参数是群组名称,我们可以将相关的项目归类到同一个群组。
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
step2.在智能卷标面板加入属性项目
DesignerActionPropertyItem类别是设定智能卷标面上的属性项目,DesignerActionPropertyItem建构函式的第一个参数(memberName)为属性名称,这个属性指的是TBDateEditActionList类别中的属性,所以要在TBDateEditActionList新增一个对应的属性。
例如在智能卷标中加入AutoPostBack属性项目,则在TBDateEditActionList类别需有一个对应AutoPostBack属性。
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
TBDateEditActionList.AutoPostBack属性如下,其中Me.Component指的是目前的TDateEdit控件,透过GetPropertyValue及SetPropertyValue方法来存取控件的指定属性。
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
step3.在智能卷标面板加入方法项目
DesignerActionMethodItem类别是设定智能卷标面上的方法项目,DesignerActionPropertyItem建构函式的第二个参数(memberName)为方法名称,这个方法指的是TBDateEditActionList类别中的方法,所以要在TBDateEditActionList新增一个对应的方法。
例如在智能卷标中加入About方法项目,则在TBDateEditActionList类别需有一个对应About方法。
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
TBDateEditActionList的About方法只是单纯显示一个讯息窗口,一般你可以在这方法加入任何想在设计阶段处理的动作。例如自动产生GridView的字段、在FormView加入控件并自动排版,这些都可以在此实现的。
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
备注:本文同步发布于「第一届iT邦帮忙铁人赛」,如果你觉得这篇文章对您有帮助,记得连上去推鉴此文增加人气^^
http://ithelp.ithome.com.tw/question/10012896
http://ithelp.ithome.com.tw/question/10012897
[新闻]Python的成功之路
博客园首页社区新闻频道小组博问网摘闪存
文章来源:http://www.cnblogs.com/jeff377/archive/2008/10/23/1317325.html
程序代码下载:
一、TDateEdit控件介绍TDateEdit控件是笔者之前在部落格中实作的一个日期控件,如下图所示。它是结合JavaScript的TheCoolestDHTMLCalendar日期选择器实作的控件,我已将TDateEdit控件的相关程序代码含入Bee.Web.dll组件中。TDateEdit控件的相关细节可以参考笔者部落格下面几篇文章有进一步说明,本文将以TDateEdit控件为例,只针对实作智能标签的部分做进一步说明。
二、控件加入智能卷标控件要加入智能卷标要实作控件的Designer,我们继承ControlDesigner命名为TBDateEditDesigner,然后覆写ActionLists属性,此属性即是传回智能卷标中所包含的项目清单集合。在ActionLists属性中一般会先加入父类别的ActionLists属性,再加入自订的ActionList类别,这样才可以保留原父类别中智能卷标的项目清单。
'''<summary>
'''TBDateEdit控制項的設計模式行為。
'''</summary>
PublicClassTBDateEditDesigner
InheritsSystem.Web.UI.Design.ControlDesigner
'''<summary>
'''取得控制項設計工具的動作清單集合。
'''</summary>
PublicOverridesReadOnlyPropertyActionLists()AsDesignerActionListCollection
Get
DimoActionListsAsNewDesignerActionListCollection()
oActionLists.AddRange(MyBase.ActionLists)
oActionLists.Add(NewTBDateEditActionList(Me))
ReturnoActionLists
EndGet
EndProperty
EndClass
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
我们自订的ActionList为TBDateEditActionList类别,它在智能卷标呈现的项目清单如下图所示,接下去我们会说明TBDateEditActionList类别的内容。
三、自订智能卷标面板的项目清单集合
DesignerActionList类别定义用于建立智能卷标面板的项目清单的基底类别,所以我们首先继承DesignerActionList命名为TBDateEditActionList。
'''<summary>
'''定義TBDateEdit控制項智慧標籤面板的項目清單集合。
'''</summary>
PublicClassTBDateEditActionList
InheritsDesignerActionList
'''<summary>
'''建構函式。
'''</summary>
PublicSubNew(ByValownerAsControlDesigner)
MyBase.New(owner.Component)
EndSub
EndClass
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
接下来要覆写GetSortedActionItems方法,它会回传DesignerActionItemCollection集合型别,此集合中会传回要显示在智能卷标面板的项目清单集合,所以我们要在DesignerActionItemCollection集合中加入我们要呈现的项目清单内容。
'''<summary>
'''傳回要顯示在智慧標籤面板的項目清單集合。
'''</summary>
PublicOverridesFunctionGetSortedActionItems()AsSystem.ComponentModel.Design.DesignerActionItemCollection
DimoItemsAsNewDesignerActionItemCollection()
'在此加入智慧標籤面板的項目清單
ReturnoItems
EndFunction
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
step1.在智能卷标面板加入静态标题项目
首先介绍DesignerActionHeaderItem类别,它是设定静态标题项目,例如我们在TDateEdit的智能标签中加入「行为」、「外观」二个标题项目,其中DesignerActionHeaderItem建构函式的category参数是群组名称,我们可以将相关的项目归类到同一个群组。
DimoItemsAsNewDesignerActionItemCollection()
oItems.Add(NewDesignerActionHeaderItem("行為","Behavior"))
oItems.Add(NewDesignerActionHeaderItem("外觀","Appearance"))
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
step2.在智能卷标面板加入属性项目
DesignerActionPropertyItem类别是设定智能卷标面上的属性项目,DesignerActionPropertyItem建构函式的第一个参数(memberName)为属性名称,这个属性指的是TBDateEditActionList类别中的属性,所以要在TBDateEditActionList新增一个对应的属性。
例如在智能卷标中加入AutoPostBack属性项目,则在TBDateEditActionList类别需有一个对应AutoPostBack属性。
oItems.Add(NewDesignerActionPropertyItem("AutoPostBack",_
"AutoPostBack","Behavior","是否引發PostBack動作。"))
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
TBDateEditActionList.AutoPostBack属性如下,其中Me.Component指的是目前的TDateEdit控件,透过GetPropertyValue及SetPropertyValue方法来存取控件的指定属性。
'''<summary>
'''是否引發PostBack動作。
'''</summary>
PublicPropertyAutoPostBack()AsBoolean
Get
ReturnCType(GetPropertyValue(Me.Component,"AutoPostBack"),Boolean)
EndGet
Set(ByValvalueAsBoolean)
SetPropertyValue(Me.Component,"AutoPostBack",value)
EndSet
EndProperty
'''<summary>
'''設定物件的屬性值。
'''</summary>
'''<paramname="Component">屬性值將要設定的物件。</param>
'''<paramname="PropertyName">屬性名稱。</param>
'''<paramname="Value">新值。</param>
PublicSharedSubSetPropertyValue(ByValComponentAsObject,ByValPropertyNameAsString,ByValValueAsObject)
DimPropAsPropertyDescriptor=TypeDescriptor.GetProperties(Component).Item(PropertyName)
Prop.SetValue(Component,Value)
EndSub
'''<summary>
'''取得物件的屬性值。
'''</summary>
'''<paramname="Component">具有要擷取屬性的物件。</param>
'''<paramname="PropertyName">屬性名稱。</param>
PublicSharedFunctionGetPropertyValue(ByValComponentAsObject,ByValPropertyNameAsString)AsObject
DimPropAsPropertyDescriptor=TypeDescriptor.GetProperties(Component).Item(PropertyName)
ReturnProp.GetValue(Component)
EndFunction
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
step3.在智能卷标面板加入方法项目
DesignerActionMethodItem类别是设定智能卷标面上的方法项目,DesignerActionPropertyItem建构函式的第二个参数(memberName)为方法名称,这个方法指的是TBDateEditActionList类别中的方法,所以要在TBDateEditActionList新增一个对应的方法。
例如在智能卷标中加入About方法项目,则在TBDateEditActionList类别需有一个对应About方法。
oItems.Add(NewDesignerActionMethodItem(Me,"About",_
"關於TDateEdit控制項","About",_
"關於TDateEdit控制項。",True))
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
TBDateEditActionList的About方法只是单纯显示一个讯息窗口,一般你可以在这方法加入任何想在设计阶段处理的动作。例如自动产生GridView的字段、在FormView加入控件并自动排版,这些都可以在此实现的。
PublicSubAbout()
MsgBox("TDateEdit是結合TheCoolestDHTMLCalendar日期選擇器實作的控制項")
EndSub
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
备注:本文同步发布于「第一届iT邦帮忙铁人赛」,如果你觉得这篇文章对您有帮助,记得连上去推鉴此文增加人气^^
文章来源:http://www.cnblogs.com/jeff377/archive/2008/10/23/1317325.html
相关文章推荐
- [ASP.NET 控件实作 Day21] 实作控件智能卷标
- [导入][ASP.NET 控件实作 Day17] 集合属性包含不同型别的成员
- [导入][ASP.NET 控件实作 Day23] 自订 GridVie 字段类别 - 实作 TBDropDownField 字段类别
- [导入][ASP.NET 控件实作 Day19] 控件设计阶段的外观
- [导入][ASP.NET 控件实作 Day18] 修改集合属性编辑器
- [导入][ASP.NET 控件实作 Day20] 侦错设计阶段的程序代码
- [导入][ASP.NET 控件实作 Day22] 让 DropDownList 不再因项目清单不存在而造成错误
- [导入][ASP.NET 控件实作 Day16] 继承 WebControl 实作 Toolbar 控件
- [导入][ASP.NET 控件实作 Day15] 复合控件隐藏的问题
- [导入]自定义asp.net控件分析
- [ASP.NET 控件实作 Day26] 让你的 GridView 与众不同
- [ASP.NET 控件实作 Day27] 控件依 FormView CurrentMode 自行设定状态
- asp.net中Excel导入导出控件 2.0升级版本和1.0版本代码开源
- [导入]使用反射将业务对象绑定到 ASP.NET 窗体控件(修改篇)
- [导入]Asp.net 2.0 制作复合控件示例(二)[示例代码下载]
- [ASP.NET 控件实作 Day10] Media Player 控件
- [ASP.NET 控件实作 Day4] 复合控件
- [ASP.NET 控件实作 Day11] ActiveX 服务器控件
- [导入]AjaxPro.NET实现TextBox智能获取服务端数据功能(Asp.net 2.0)(示例代码下载)
- [导入]Asp.net 2.0 制作最原始的TextBox控件[一](示例代码下载)