.
.
(一). 概述
控件名称: 工具栏控件, 分为主菜单和子菜单部分, 涉及到公司代码版权, 目前版本不是最终版本, 且去除了一些代码, 后面可下载的仅为纯控件开发技术相关代码. 通过扩展可以任意定制需要的功能. 里面一些设计思想也具有参考价值.
Author:【夜战鹰】【ChengKing(ZhengJian)】
(二). 控件运行效果截图
1. 默认样式和自定义样式
<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><img alt="" src="https://p-blog.youkuaiyun.com/images/p_blog_youkuaiyun.com/ChengKing/ToolButtonControl.JPG"></shapetype>
<shapetype coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">2. 项集合编辑器</shapetype>
<shapetype coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><img alt="" src="https://p-blog.youkuaiyun.com/images/p_blog_youkuaiyun.com/ChengKing/ToolButtonControl_CollectionEditor.JPG"></shapetype>
<shapetype coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 128.25pt" type="#_x0000_t75"><imagedata src="file:///D:%5CDOCUME~1%5CZHENGJ~1%5CLOCALS~1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.png" o:title=""></imagedata></shape>
(三). 代码部分
1. 主控件类ToolButton代码
2///Author:【金鹰】【专注于DotNet技术】【ChengKing(ZhengJian)】
3///Blog:Http://blog.youkuaiyun.com/ChengKing
4///</summary>
5
6usingSystem;
7usingSystem.Collections.Generic;
8usingSystem.ComponentModel;
9usingSystem.Text;
10usingSystem.Web;
11usingSystem.Web.UI;
12usingSystem.Web.UI.WebControls;
13usingSystem.Web.UI.HtmlControls;
14usingSystem.IO;
15usingSystem.Drawing;
16
17namespaceToolButton
18{
19[DefaultProperty("Text")]
20[ToolboxData("<{0}:ToolButtonrunat=server></{0}:ToolButton>")]
21publicclassToolButton:CompositeControl,INamingContainer
22{
23#region内部变量
24
25//含下拉箭头单元格的ID
26privatestringtcDownID="";
27
28//本控件的ID
29privatestringtbID="";
30
31#endregion
32
33#region属性
34
35///<summary>
36///设置或获取显示的文本
37///</summary>
38[Bindable(true)]
39[Category("Appearance")]
40[DefaultValue("[按钮文本]")]
41[Localizable(true)]
42[Description("显示的文本")]
43publicstringText
44{
45get
46{
47strings=(string)ViewState["Text"];
48return((s==null)?String.Empty:s);
49}
50set
51{
52ViewState["Text"]=value;
53}
54}
55
56///<summary>
57///设置或获取图片路径
58///</summary>
59[Bindable(true)]
60[Category("Appearance")]
61[DefaultValue("NoPic.gif")]
62[Localizable(true)]
63[Description("显示图像的文件名")]
64publicstringImageName
65{
66get
67{
68Strings=(String)ViewState["ImageName"];
69return((s==null)?String.Empty:s);
70}
71
72set
73{
74ViewState["ImageName"]=value;
75}
76}
77
78///<summary>
79///设置或获取图片文件夹目录
80///</summary>
81[Bindable(true)]
82[Category("客户端路径")]
83[DefaultValue("")]
84[Localizable(true)]
85[Description("资源(image/css/js)的客户端根目录")]
86publicstringClientPath
87{
88get
89{
90Strings=(String)ViewState["ClientPath"];
91return((s==null)?String.Empty:s);
92}
93
94set
95{
96ViewState["ClientPath"]=value;
97}
98}
99
100///<summary>
101///设置或获取点击按钮执行的命令(点击大按钮执行的命令)
102///</summary>
103[Bindable(true)]
104[Category("行为")]
105[DefaultValue("")]
106[Localizable(true)]
107[Description("点击控件执行的命令字串")]
108publicstringCommand
109{
110get
111{
112strings=(string)ViewState["Command"];
113return((s==null)?String.Empty:s);
114}
115set
116{
117ViewState["Command"]=value;
118}
119}
120
121privatePopupMenu_Items=newPopupMenu();
122
123///<summary>
124///获取子菜单集合
125///</summary>
126[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
127[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
128[Description("获取或设置下拉子菜单项集合")]
129[Category("杂项")]
130[NotifyParentProperty(true)]
131[TypeConverter(typeof(CollectionConverter))]
132[DesignOnly(false)]
133publicPopupMenuItems
134{
135get
136{
137if(_Items==null)
138{
139_Items=newPopupMenu();
140}
141return_Items;
142}
143}
144
145///<summary>
146///设置或获取子菜单集合句柄
147///</summary>
148[Browsable(false)]
149[Description("获取或设置菜单")]
150publicPopupMenuMenu
151{
152get
153{
154return_Items;
155}
156set
157{
158this._Items.Clear();
159foreach(PopupMenuItemiteminvalue)
160{
161this._Items.Add(item);
162}
163}
164}
165
166[Browsable(true)]
167[Category("CSS样式")]
168[Description("获取或设置主控件的OnMouseOver样式")]
169publicstringCSS_MAIN_ONMOUSEOVER_CLASSNAME
170{
171get
172{
173strings=(string)ViewState["CSS_MAIN_ONMOUSEOVER"];
174return((s==null)?String.Empty:s);
175}
176set
177{
178ViewState["CSS_MAIN_ONMOUSEOVER"]=value;
179}
180}
181[Browsable(true)]
182[Category("CSS样式")]
183[Description("获取或设置主控件的OnMouseOut样式")]
184publicstringCSS_MAIN_ONMOUSEOUT_CLASSNAME
185{
186get
187{
188strings=(string)ViewState["CSS_MAIN_ONMOUSEOUT"];
189return((s==null)?String.Empty:s);
190}
191set
192{
193ViewState["CSS_MAIN_ONMOUSEOUT"]=value;
194}
195}
196[Browsable(true)]
197[Category("CSS样式")]
198[Description("获取或设置下拉款项的OnMouseOver样式")]
199publicstringCSS_SUBITEM_ONMOUSEOVER_CLASSNAME
200{
201get
202{
203strings=(string)ViewState["CSS_SUBITEM_ONMOUSEOVER"];
204return((s==null)?String.Empty:s);
205}
206set
207{
208ViewState["CSS_SUBITEM_ONMOUSEOVER"]=value;
209}
210}
211[Browsable(true)]
212[Category("CSS样式")]
213[Description("获取或设置下拉款项的OnMouseOut样式")]
214publicstringCSS_SUBITEM_ONMOUSEOUT_CLASSNAME
215{
216get
217{
218strings=(string)ViewState["CSS_SUBITEM_ONMOUSEOUT"];
219return((s==null)?String.Empty:s);
220}
221set
222{
223ViewState["CSS_SUBITEM_ONMOUSEOUT"]=value;
224}
225}
226
227
228#endregion
229
230#region构造函数
231
232///<summary>
233///构造函数
234///</summary>
235publicToolButton()
236{
237//设置一套默认风格
238this.BackColor=Color.FromName("MenuBar");//ViewState["BackColor"]=Color.FromName("MenuBar");
239ViewState["Text"]="[按钮文本]";
240//ViewState["ClientPath"]="ToolButtonImages";
241ViewState["ImageName"]="NoPic.gif";
242this.BorderStyle=BorderStyle.NotSet;//ViewState["BorderStyle"]=BorderStyle.NotSet;
243this.BorderWidth=Unit.Pixel(1);//ViewState["BorderWidth"]=Unit.Pixel(1);
244this.BorderColor=Color.FromName("ControlDark");//ViewState["BorderColor"]=Color.FromName("ControlDark");
245this.Height=Unit.Pixel(25);//ViewState["Height"]=Unit.Pixel(25);
246//this.Width=Unit.Pixel(100);]
247}
248
249#endregion
250
251#region方法
252
253protectedoverridevoidRender(HtmlTextWriterwriter)
254{
255//base.Render(writer);
256PrepareControlForRendering();
257base.RenderContents(writer);
258}
259
260///<summary>
261///设置控件树的样式和客户端事件
262///</summary>
263privatevoidPrepareControlForRendering()
264{
265
266if(this.Controls.Count<1)
267{
268return;
269}
270
271boolIsCustomStyle=CSS_MAIN_ONMOUSEOVER_CLASSNAME!=String.Empty&&CSS_MAIN_ONMOUSEOUT_CLASSNAME!=String.Empty;
272
273Tablet=(Table)this.Controls[0];
274t.CellPadding=0;
275t.CellSpacing=0;
276t.Style.Add("Cursor","default");
277t.CopyBaseAttributes(this);
278t.Height=this.Height;
279t.Width=this.Width;
280t.BorderStyle=this.BorderStyle;
281t.BorderWidth=Unit.Pixel(0);
282t.Attributes.Add("onselectstart","returnfalse;");
283
284//t.Style.Add("aligh","left");
285//t.Style.Add("table-layout","fixed");
286//t.Style.Add("word-wrap","break-word");
287//***style="display:inline-block
288//t.Style.Add("display:inline","block");
289
290//if(CSS_MAIN_ONMOUSEOVER_CLASSNAME!=String.Empty&&CSS_MAIN_ONMOUSEOUT_CLASSNAME!=String.Empty)
291//{
292//t.CssClass=this.CSS_MAIN_ONMOUSEOUT_CLASSNAME;
293//t.Attributes.Add("onmouseenter","ChangeClassName(this,'"+CSS_MAIN_ONMOUSEOVER_CLASSNAME+"')");
294//t.Attributes.Add("onmouseleave","ChangeClassName(this,'"+CSS_MAIN_ONMOUSEOUT_CLASSNAME+"')");
295//}
296
297
298if(t.Rows.Count>0)
299{
300TableRowtr=t.Rows[0];
301//if(IsCustomStyle==false)
302//{
303tr.BorderWidth=Unit.Pixel(0);
304//}
305
306
307////应用用户定义样式
308//if(IsCustomStyle)
309//{
310//tr.CssClass=this.CSS_MAIN_ONMOUSEOUT_CLASSNAME;
311//tr.Attributes.Add("onmouseenter","ChangeClassName(this,'"+CSS_MAIN_ONMOUSEOVER_CLASSNAME+"')");
312//tr.Attributes.Add("onmouseleave","ChangeClassName(this,'"+CSS_MAIN_ONMOUSEOUT_CLASSNAME+"')");
313//}
314
315for(
介绍了一种工具栏控件的设计与实现,该控件包括主菜单和子菜单部分,并提供了丰富的自定义选项,如文本、图像及样式设置等。
680

被折叠的 条评论
为什么被折叠?



