用户自定义控件的重载问题!


我想做一个图片按钮,继承原有的ImageButton,但是我想用标签<BUTTON></BUTTON>这种形式,但是输到页面后的属性保持与按ImageButton输出时的属性一致。
我Override RenderBeginTag(或RenderFullBeginTag)方法和RenderEndTag后,我定义的控件就没有任何属性值输出到页面了,我又尝试Override AddAttributeToRender后还是不能用,不知道怎么才能使这个能正常执行,得到我想要的结果。
我如果没有用 Override  RenderBeginTag 则会提示PushEndTag没有使用前就调用了另一个方法,但是查了一下那个方法是受保护的。到底Web控件怎么输出到南面的,那些函数的执行顺序是什么样的??

7 个解决方案

#1


自定义控件你需要自己创建类库编译了再引用的。直接继承一个 ImageButton 的基类好像不会有效果。
用 Reflector 就可以看到 ImageButton 控件代码里的情况了。


#2


可以说一下你需要输出的详细格式是怎样的。以及贴出你写的这个继承的类的代码。
我可以帮你试试。


#3


using System;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace MyCtrol
{
/// <summary>
/// WebCustomControl1 的摘要说明。
/// </summary>
[DefaultProperty("Caption"),
ToolboxData("<{0}:ImageButton runat=server></{0}:ImageButton>")]
public class ImageButton : System.Web.UI.WebControls.ImageButton
{
private string caption;

[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Caption
{
get
{
return caption;
}
set
{
caption = value;
}
}

/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter writer)
{
writer.Indent=5;
//writer.AddStyleAttribute("FONT", "verdana");
writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "14pt");
writer.WriteBeginTag("BUTTON");
writer.WriteAttribute("border","1");
writer.Write(HtmlTextWriter.TagRightChar);
writer.WriteLine();
writer.Indent=4;
writer.WriteEndTag("BUTTON");
}
}
}
为什么不能得到样式
我采有先重写出RenderBeginTag,再重载AddAttributeToRender,再重载RenderEndTag,最后还是没有样式,为什么会这样
我的目的是把ImageButton的input标签换成<Button></Button>,到底怎么样实现?

#4


其它的属性保持不变,另外问一个问题。Enum有不有遍历呀?

#5


学习

#6


终于知道答案了,其实只要重载TagKey就可以了,贴出代码以供交流

using System;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.Drawing.Design;
using System.ComponentModel;

namespace MyControl
{
/// <summary>
/// ImageButton 的摘要说明。
/// </summary>
[DefaultProperty("Text"), 
ToolboxData("<{0}:ImageButton runat=server></{0}:ImageButton>")]
public class ImageButton : System.Web.UI.WebControls.Button
{
/// <summary>
/// 控件的属性-图片的路径
/// </summary>
[Bindable(true), 
Category("Appearance"), 
DefaultValue(""),
EditorAttribute(typeof(ImageUrlEditor), typeof(UITypeEditor)),
Description("将在控件上显示的图片")] 
public virtual string ImageUrl
{
get
{
string text1 = (string) this.ViewState["ImageUrl"];
if (text1 != null)
{
return text1;
}
return string.Empty;
}
set
{
this.ViewState["ImageUrl"] = value;
}
}

/// <summary> 
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void RenderContents(HtmlTextWriter writer)
{
System.Web.UI.WebControls.Image MyImage=new Image();
MyImage.ImageUrl=this.ImageUrl;
MyImage.ImageAlign=ImageAlign.AbsMiddle;
MyImage.Style["Margin-Right"]="3px";
MyImage.RenderControl(writer);
writer.Write(this.Text);
}

protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Button;
}
}
}
}

#7


放两天就结贴
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告