读书人

|M| 学写第一个自定义控件的最后一个有

发布时间: 2012-01-24 23:11:54 作者: rapoo

|M| 学写第一个自定义控件的最后一个问题:[DefaultProperty("Message")]无效
[DefaultProperty( "Message "), ToolboxData( " <{0}:WebRev runat=server /> ")]

我已经定义了属性
[Browsable(true), Themeable(false), Category( "我的属性 "), DefaultValue( "* "), Description( "当焦点在验证控件时显示的信息 ")]
public String Message
{
get { return _Message; }
set { _Message = value; }
}

也就是要当控件拖到设计页面上的时候显示出来的属性值

但我的当不能正常的显示:我贴出所有源码
---------------------------------
using System;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;
using System.Drawing;

namespace zhang
{
[DefaultProperty( "Message "), ToolboxData( " <{0}:WebRev runat=server /> ")]
[System.Drawing.ToolboxBitmap(typeof(RegularExpressionValidator))]
public class webRev : System.Web.UI.WebControls.WebControl
{
#region 私有变量
String _Message = "* ";
Boolean _AlwaysShow = true;
String _FocusClientScript = " ";
String _BlurClientScript = " ";
Boolean _FieldValidator = true;
String _ErrorMessage = "* ";
String _ValidationExpression = " ";
String _ControlToValidate = " ";
ValidatorDisplay _Display = ValidatorDisplay.Dynamic;
String _NotNullMessage = "* ";
Color _ErrorColor = Color.Red;
Color _NotNullColor = Color.Red;
String _ValidationGroup = " ";
//Color _MessageColor = Color.Red;
#endregion
#region 设计属性
[Browsable(true), Themeable(false), Category( "我的属性 "), DefaultValue( "* "), Description( "当焦点在验证控件时显示的信息 ")]
public String Message


{
get { return _Message; }
set { _Message = value; }
}
[Browsable(true), Themeable(false), Category( "我的属性 "), DefaultValue(true), Description( "是否默认显示错误信息 ")]
public Boolean AlwaysShow
{
get { return _AlwaysShow; }
set { _AlwaysShow = value; }
}
[Browsable(true), Themeable(false), Category( "我的属性 "), DefaultValue( " "), Description( "当焦点在验证控件时执行的脚本 ")]
public String FocusClientScript
{
get { return _FocusClientScript; }
set { _FocusClientScript = value; }
}
[Browsable(true), Themeable(false), Category( "我的属性 "), DefaultValue( " "), Description( "当焦点离开验证控件时执行的脚本 ")]
public String BlurClientScript
{
get { return _BlurClientScript; }
set { _BlurClientScript = value; }
}
[Browsable(true), Themeable(false), Category( "我的属性 "), DefaultValue(true), Description( "是否验证字段不为空 ")]
public Boolean FieldValidator
{
get { return _FieldValidator; }
set { _FieldValidator = value; }
}
[Browsable(true), Themeable(false), Category( "验证属性 "), DefaultValue( "* "), Description( "验证无效时显示的出错信息 ")]
public string ErrorMessage


{
get { return _ErrorMessage; }
set { _ErrorMessage = value; }
}
[Browsable(true), Themeable(false), Category( "验证属性 "), DefaultValue( " "), Description( "用于确定有效性的正则表达式 ")]
public string ValidationExpression
{
get { return _ValidationExpression; }
set { _ValidationExpression = value; }
}
[Browsable(true), Themeable(false), Category( "验证属性 "), DefaultValue( " "), Description( "要验证的控件ID ")]
[IDReferenceProperty, TypeConverter(typeof(ValidatedControlConverter))]
public string ControlToValidate
{
get { return _ControlToValidate; }
set { _ControlToValidate = value; }
}
[Browsable(true), Themeable(false), Category( "验证属性 "), DefaultValue(ValidatorDisplay.Dynamic), Description( "验证程序的显示方式 ")]
public ValidatorDisplay Display
{
get { return _Display; }
set { _Display = value; }
}
[Browsable(true), Themeable(false), Category( "验证属性 "), DefaultValue( "* "), Description( "验证控件是不为空时出错信息 ")]
public string NotNullMessage
{
get { return _NotNullMessage; }
set { _NotNullMessage = value; }
}
[Browsable(true), Themeable(false), Category( "验证属性 "), DefaultValue(typeof(Color), "Red "), Description( "验证正则出错信息颜色 ")]


[TypeConverter(typeof(System.Web.UI.WebControls.WebColorConverter))]
public Color ErrorColor
{
get { return _ErrorColor; }
set { _ErrorColor = value; }
}
[Browsable(true), Themeable(false), Category( "验证属性 "), DefaultValue(typeof(Color), "Red "), Description( "验证正则出错信息颜色 ")]
[TypeConverter(typeof(System.Web.UI.WebControls.WebColorConverter))]
public Color NotNullColor
{
get { return _NotNullColor; }
set { _NotNullColor = value; }
}
[Browsable(true), Themeable(false), Category( "验证属性 "), DefaultValue( " "), Description( "验证控件组 ")]
public string ValidationGroup
{
get { return _ValidationGroup; }
set { _ValidationGroup = value; }
}


//[Browsable(true), Themeable(false), Category( "验证属性 "), DefaultValue(typeof(Color), "Red "), Description( "验证正则出错信息颜色 ")]
//[TypeConverter(typeof(System.Web.UI.WebControls.WebColorConverter))]
//public Color MessageColor
//{
// get { return _MessageColor; }
// set { _MessageColor = value; }
//}

#endregion

protected override void OnInit(EventArgs e)
{
RequiredFieldValidator req = new RequiredFieldValidator();


req.ControlToValidate = this.ControlToValidate;
req.ErrorMessage = this.NotNullMessage;
req.Display = this.Display;
req.ForeColor = this.NotNullColor;
req.ValidationGroup = ValidationGroup;
if (FieldValidator == true) this.Controls.Add(req);


RegularExpressionValidator reg = new RegularExpressionValidator();
reg.ControlToValidate = this.ControlToValidate;
reg.ErrorMessage = this.ErrorMessage;
reg.ValidationExpression = this.ValidationExpression;
reg.Display = this.Display;
reg.ForeColor = this.ErrorColor;
reg.ValidationGroup = ValidationGroup;
this.Controls.Add(reg);

base.OnInit(e);
}

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
}

protected override void Render(HtmlTextWriter output)
{
base.Render(output);
}

protected override void RenderChildren(HtmlTextWriter writer)
{
//base.RenderChildren(writer);
WebControl c = (WebControl)this.Controls[1];
//c.Style.Add( "border ", "solid 1px red ");
//c.Style.Remove( "display ");


//c.Attributes.Add( "display ", " ");
System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter wt = new HtmlTextWriter(sw);
c.RenderControl(wt);
writer.Write(sw.ToString().Replace( "display:none; ", " "));

wt.Close();
sw.Close();

c = (WebControl)this.Controls[0];
c.RenderControl(writer);

}
}
}
---------------------------
大家看看为什么默认显示的属性没有出来,而显示的是 "** "

[解决办法]
[Browsable(true), Themeable(false), Category( "我的属性 "), DefaultValue( "* "), Description( "当焦点在验证控件时显示的信息 ")]
public String Message
{
get { return _Message; }
set { _Message = value; }
}

改成
[Browsable(true), Themeable(false), Category( "我的属性 "), DefaultValue( "在这里输入数字 "), Description( "当焦点在验证控件时显示的信息 ")]
public String Message
{
get { return _Message; }
set { _Message = value; }
}

你的默认值得设成了*
我被LZ的学习精神 深深的感动了!
很多程序员正式缺少这一点啊,看到LZ我觉得我以后要加倍努力了

[解决办法]
自己做一个设计器.==

读书人网 >asp.net

热点推荐