请教自定义web控件

aaajedll 2010-05-09 10:05:36
请教自定义web控件每个步骤的意思和作用,以下是一段代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing.Design;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.Drawing;
//该源码下载自www.51aspx.com(51aspx.com)

namespace HeroBeastControls.NavMenu
{

[DesignerAttribute(typeof(NavMenuDesigner))]
[DefaultProperty("Text")]
[ToolboxData("<{0}:NavMenu runat=server></{0}:NavMenu>")]
[ParseChildren(true, "ListItems")]
public class NavMenu : WebControl, INamingContainer
{
bool _supportJS = true;
#region 属性
/// <summary>
/// 定义项集合属性
/// </summary>
private NavMenuItems _ListItems;
[
Category("Behavior"),
Description("项集合"),
DesignerSerializationVisibility(
DesignerSerializationVisibility.Content),
PersistenceMode(PersistenceMode.InnerDefaultProperty),
Editor(typeof(NavMenuItemEditor), typeof(UITypeEditor))
]
public NavMenuItems ListItems
{
get
{
if (_ListItems == null)
{
_ListItems = new NavMenuItems();

}
return _ListItems;
}
}


[UrlProperty("*.css")]
[Category("Behavior")]
[DefaultValue(CssFilePathConverter.EmbeddedCss)]
[Editor(typeof(CssUrlEditor), typeof(UITypeEditor))]
[Description("通过指定外部CSS文件定制控件的样式。")]
public string CssFilePath
{
get
{
if (ViewState["CssFilePath"] == null)
return CssFilePathConverter.EmbeddedCss;
else
return (string)ViewState["CssFilePath"];
}
set
{
ViewState["CssFilePath"] = value;
}
}


public override Unit Height
{
get
{
return base.Height;
}
set
{
base.Height = value;
}
}
[DefaultValue("100%")]
public override Unit Width
{
get
{
return base.Width;
}
set
{
base.Width = value;
}
}
#endregion

#region 构造函数
public NavMenu()
: base(HtmlTextWriterTag.Div)
{

}
#endregion

#region RenderContents
protected override void RenderContents(HtmlTextWriter writer)
{
System.Text.StringBuilder sb = new StringBuilder();
//sb.Append("<div id=\"MenuAll\">");
//sb.Append("</br>");
sb.Append(" <div class=\"NavMenuContainer\" id=\"" + this.ClientID + "_Container" + "\" style=\"float:left\">");
//NavMenuItems
//<div class="collapsed">
// <span class="sys">系统设置中心</span>
// <a title="站点基础信息" href="#">站点基础信息</a>
// <a title="搜索引擎优化" href="#">搜索引擎优化</a>
// <a title="相关功能设置" href="#">相关功能设置</a>style=" background-image:url()"
// </div>
if (_ListItems != null)
{
foreach (NavMenuItem item in _ListItems)
{
sb.Append("<div class=\"collapsed\">");
sb.Append(string.Format("<span class=\"{0}\">{1}</span> ", item.CssClass, item.Text));

if (item.Items != null)
{
foreach (NavMenuSubItem li in item.Items)
{
sb.Append(string.Format("<a title=\"{0}\" href=\"{1}\" target=\"{2}\" class=\"{3}\">{4}</a> ",
li.Title, li.NavigationURL, li.Target, li.CssClass, li.Text));
//sb.Append("</br>");
}
}
sb.Append("</div>");
// sb.Append("</br>");
}
}
//
sb.Append("</div>");
// sb.Append("</div>");

writer.Write(sb.ToString());

base.RenderContents(writer);
}
#endregion

#region AddAttributesToRender
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass);
base.AddAttributesToRender(writer);
}
#endregion


#region OnPreRender
protected override void OnPreRender(EventArgs e)
{
EnsureID();
if (!DesignMode)
{
if (Page.Request.Browser.EcmaScriptVersion.Major < 1
|| Page.Request.Browser.W3CDomVersion.Major < 1)
{
_supportJS = false;
}
}
if (_supportJS)
{
RegisterCSSFile(this);
RegisterJavascriptFile();
RegisterJavascript();
}
}
#endregion

#region 注册CSS文件
public bool RegisterCSSFile(NavMenu control)
{
if (!DesignMode)
{
string cssFile = control.CssFilePath;
if (cssFile == CssFilePathConverter.EmbeddedCss)
cssFile = control.GetWebResourceCSSPath();
return control.RegisterCSSFile(control.Page.Header, cssFile);
}
return false;
}

string GetWebResourceCSSPath()
{
return Page.ClientScript.GetWebResourceUrl(typeof(NavMenu), "NavMenu.CSS.NavMenu.css");
}
bool RegisterCSSFile(HtmlHead head, string cssFile)
{
bool added = false;
foreach (Control c in head.Controls)
{
HtmlLink link = c as HtmlLink;
if (link != null)
{
if (link.Href == cssFile)
{
added = true;
break;
}
}
}
if (!added)
{
HtmlLink link = new HtmlLink();
link.Href = cssFile;
link.Attributes["type"] = "text/css";
link.Attributes["rel"] = "Stylesheet";
link.Attributes["rev"] = "Stylesheet";
head.Controls.Add(link);
added = true;
}
return added;
}
#endregion

#region 注册JS
public void RegisterJavascriptFile()
{
Page.ClientScript.RegisterClientScriptResource(typeof(NavMenu), "NavMenu.Javascript.NavMenu.js");

}
public void RegisterJavascript()
{
string strContainer = this.ClientID + "_Container";
System.Text.StringBuilder sb = new StringBuilder();

sb.Append("\n");
sb.Append("\n\t");
sb.Append("var " + strContainer + ";");
sb.Append("\n\t");
sb.Append("window.onload = function() { " + strContainer + " = new NavMenu(\"" + strContainer + "\");");
sb.Append(strContainer + ".init();}\n\t");
sb.Append("\n");

Page.ClientScript.RegisterStartupScript(typeof(NavMenu), strContainer, sb.ToString(), true);


}
#endregion



}
}

...全文
115 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果问我,我会反问你:如果删除了这几条代码你怎样测试出程序有什么bug?如果测不出来,那么就应该删,而不要问我为什么会有这几行代码。

这就是要你先自己下功夫。
pang_hailong 2010-05-09
  • 打赏
  • 举报
回复
bool _supportJS = true;//定义一个bool型的变量初始化为真

public NavMenuItems ListItems //定义ListItems项集合属性

{
get //获得属性
{
if (_ListItems == null)
{
_ListItems = new NavMenuItems();

}
return _ListItems;
}
}

public string CssFilePath //定外部CSS文件定制控件的路径
{
get
{
if (ViewState["CssFilePath"] == null) //判断路径师傅存在
return CssFilePathConverter.EmbeddedCss;
else
return (string)ViewState["CssFilePath"]; //将ViewState["CssFilePath"]; 强制转换为string
}
set
{
ViewState["CssFilePath"] = value;
}
}

public override Unit Height
{
get
{
return base.Height;
}
set
{
base.Height = value;
}
}
weir55 2010-05-09
  • 打赏
  • 举报
回复
http://www.cnblogs.com/suiqirui19872005/archive/2007/10/14/923852.html
对你应该有用

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧