TypeConverter示例(一)
//调控件的宽度属性
[Bindable(true), Category("Appearance"), DefaultValue("")]
override public Unit Width
{
get
{
return tb.Width;
}
set
{
tb.Width = value;
}
}
private int _rows = 5;
//调控件的宽度属性
[Bindable(true), Category("Appearance"), DefaultValue(1)]
public int Rows
{
get
{
return _rows;
}
set
{
_rows = value;
}
}
private int _cols = 45;
//调控件的宽度属性
[Bindable(true), Category("Appearance"), DefaultValue(30)]
public int Cols
{
get
{
return _cols;
}
set
{
_cols = value;
}
}
private int _size = 45;
//调控件的宽度属性
[Bindable(true), Category("Appearance"), DefaultValue(30)]
public int Size
{
get
{
return _size;
}
set
{
_size = value;
}
}
//调控件的宽度属性
[Bindable(true), Category("Appearance"), DefaultValue(true)]
public override bool Enabled
{
get
{
return tb.Enabled;
}
set
{
tb.Enabled = value;
}
}
private string _maximumValue = null;
[Bindable(true), Category("Appearance"), DefaultValue(null)]
public string MaximumValue
{
get
{
return _maximumValue;
}
set
{
_maximumValue = value;
}
}
private string _minimumValue = null;
[Bindable(true), Category("Appearance"), DefaultValue(null)]
public string MinimumValue
{
get
{
return _minimumValue;
}
set
{
_minimumValue = value;
}
}
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
//output.Write(Text);
if (this.TextMode == "MultiLine")
{
output.WriteLine("<script type=\"text/javascript\">");
output.WriteLine("function isMaxLen(o){");
output.WriteLine("var nMaxLen=o.getAttribute? parseInt(o.getAttribute(\"maxlength\")):\"\";");
output.WriteLine(" if(o.getAttribute && o.value.length>nMaxLen){");
output.WriteLine(" o.value=o.value.substring(0,nMaxLen)");
output.WriteLine("}}</script>");
this.AddAttributes("rows", Rows.ToString());
this.AddAttributes("cols", Cols.ToString());
}
else
{
if (this.Width.Value.ToString() != "")
{
if (Width.Type.ToString() != "")
{
this.AddAttributes("SIZE", (Width.Value / 10).ToString() + (Width.Type.ToString() == "ixel" ? "px" : "%"));
}
else
{
this.AddAttributes("SIZE", (Width.Value / 10).ToString() + "px");
}
}
if (this.Size.ToString() != "")
{
this.AddAttributes("SIZE", this.Size.ToString());
}
}
//当指定了输入框的最小或最大值时,则加入校验范围项
if (this.MaximumValue != null || this.MinimumValue != null)
{
rangevalidator.ControlToValidate = tb.ID;
rangevalidator.Type = ValidationDataType.Double;
rangevalidator.ForeColor = System.Drawing.Color.Black;
if (this.MaximumValue != null && this.MinimumValue != null)
{
rangevalidator.MaximumValue = this.MaximumValue;
rangevalidator.MinimumValue = this.MinimumValue;
rangevalidator.ErrorMessage = " 当前输入数据应在" + this.MinimumValue + "和" + this.MaximumValue + "之间!";
}
else
{
if (this.MaximumValue != null)
{
rangevalidator.MaximumValue = this.MaximumValue;
rangevalidator.ErrorMessage = " 当前输入数据允许最大值为" + this.MaximumValue;
}
if (this.MinimumValue != null)
{
rangevalidator.MinimumValue = this.MinimumValue;
rangevalidator.ErrorMessage = " 当前输入数据允许最小值为" + this.MinimumValue;
}
}
rangevalidator.Display = ValidatorDisplay.Static;
this.Controls.Add(rangevalidator);
}
RenderChildren(output);
}
#region IPostBackDataHandler 成员
public void RaisePostDataChangedEvent()
{ }
public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
string presentValue = this.tb.Text;
string postedValue = postCollection[postDataKey];
if (!presentValue.Equals(postedValue))//如果回发数据不等于原有数据
{
this.Text = postedValue;
this.tb.Text = postedValue;
return true;
}
return false;
}
#endregion
}
public class RequiredFieldTypeControlsConverter : StringConverter
{
public RequiredFieldTypeControlsConverter() { }
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
ArrayList controlsArray = new ArrayList();
controlsArray.Add("暂无校验");
controlsArray.Add("数据校验");
controlsArray.Add("电子邮箱");
controlsArray.Add("移动手机");
controlsArray.Add("家用电话");
controlsArray.Add("身份证号码");
controlsArray.Add("网页地址");
controlsArray.Add("日期");
controlsArray.Add("日期时间");
controlsArray.Add("金额");
controlsArray.Add("IP地址");
controlsArray.Add("IP地址带端口");
return new StandardValuesCollection(controlsArray);
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false;
}
}
public class CanBeNullControlsConverter : StringConverter
{
public CanBeNullControlsConverter() { }
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
ArrayList controlsArray = new ArrayList();
controlsArray.Add("可为空");
controlsArray.Add("必填");
return new StandardValuesCollection(controlsArray);
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false;
}
}
public class FormControlsConverter : StringConverter
{
public FormControlsConverter()
{
}
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
ControlCollection Controls = ((Page)context.Container.Components[0]).Controls;
ArrayList controlsArray = new ArrayList();
for (int i = 0; i < Controls.Count; i++)
{
if ((Controls[i] is HtmlTable
|| Controls[i] is HtmlForm
|| Controls[i] is HtmlGenericControl
|| Controls[i] is HtmlImage
|| Controls[i] is Label
|| Controls[i] is DataGrid
|| Controls[i] is DataList
|| Controls[i] is Table
|| Controls[i] is Repeater
|| Controls[i] is Image
|| Controls[i] is Panel
|| Controls[i] is PlaceHolder
|| Controls[i] is Calendar
|| Controls[i] is AdRotator
|| Controls[i] is Xml
))
{
controlsArray.Add(Controls[i].ClientID);
}
}
return new StandardValuesCollection(controlsArray);
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false;
}
}
[Bindable(true), Category("Appearance"), DefaultValue("")]
override public Unit Width
{
get
{
return tb.Width;
}
set
{
tb.Width = value;
}
}
private int _rows = 5;
//调控件的宽度属性
[Bindable(true), Category("Appearance"), DefaultValue(1)]
public int Rows
{
get
{
return _rows;
}
set
{
_rows = value;
}
}
private int _cols = 45;
//调控件的宽度属性
[Bindable(true), Category("Appearance"), DefaultValue(30)]
public int Cols
{
get
{
return _cols;
}
set
{
_cols = value;
}
}
private int _size = 45;
//调控件的宽度属性
[Bindable(true), Category("Appearance"), DefaultValue(30)]
public int Size
{
get
{
return _size;
}
set
{
_size = value;
}
}
//调控件的宽度属性
[Bindable(true), Category("Appearance"), DefaultValue(true)]
public override bool Enabled
{
get
{
return tb.Enabled;
}
set
{
tb.Enabled = value;
}
}
private string _maximumValue = null;
[Bindable(true), Category("Appearance"), DefaultValue(null)]
public string MaximumValue
{
get
{
return _maximumValue;
}
set
{
_maximumValue = value;
}
}
private string _minimumValue = null;
[Bindable(true), Category("Appearance"), DefaultValue(null)]
public string MinimumValue
{
get
{
return _minimumValue;
}
set
{
_minimumValue = value;
}
}
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
//output.Write(Text);
if (this.TextMode == "MultiLine")
{
output.WriteLine("<script type=\"text/javascript\">");
output.WriteLine("function isMaxLen(o){");
output.WriteLine("var nMaxLen=o.getAttribute? parseInt(o.getAttribute(\"maxlength\")):\"\";");
output.WriteLine(" if(o.getAttribute && o.value.length>nMaxLen){");
output.WriteLine(" o.value=o.value.substring(0,nMaxLen)");
output.WriteLine("}}</script>");
this.AddAttributes("rows", Rows.ToString());
this.AddAttributes("cols", Cols.ToString());
}
else
{
if (this.Width.Value.ToString() != "")
{
if (Width.Type.ToString() != "")
{
this.AddAttributes("SIZE", (Width.Value / 10).ToString() + (Width.Type.ToString() == "ixel" ? "px" : "%"));
}
else
{
this.AddAttributes("SIZE", (Width.Value / 10).ToString() + "px");
}
}
if (this.Size.ToString() != "")
{
this.AddAttributes("SIZE", this.Size.ToString());
}
}
//当指定了输入框的最小或最大值时,则加入校验范围项
if (this.MaximumValue != null || this.MinimumValue != null)
{
rangevalidator.ControlToValidate = tb.ID;
rangevalidator.Type = ValidationDataType.Double;
rangevalidator.ForeColor = System.Drawing.Color.Black;
if (this.MaximumValue != null && this.MinimumValue != null)
{
rangevalidator.MaximumValue = this.MaximumValue;
rangevalidator.MinimumValue = this.MinimumValue;
rangevalidator.ErrorMessage = " 当前输入数据应在" + this.MinimumValue + "和" + this.MaximumValue + "之间!";
}
else
{
if (this.MaximumValue != null)
{
rangevalidator.MaximumValue = this.MaximumValue;
rangevalidator.ErrorMessage = " 当前输入数据允许最大值为" + this.MaximumValue;
}
if (this.MinimumValue != null)
{
rangevalidator.MinimumValue = this.MinimumValue;
rangevalidator.ErrorMessage = " 当前输入数据允许最小值为" + this.MinimumValue;
}
}
rangevalidator.Display = ValidatorDisplay.Static;
this.Controls.Add(rangevalidator);
}
RenderChildren(output);
}
#region IPostBackDataHandler 成员
public void RaisePostDataChangedEvent()
{ }
public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
string presentValue = this.tb.Text;
string postedValue = postCollection[postDataKey];
if (!presentValue.Equals(postedValue))//如果回发数据不等于原有数据
{
this.Text = postedValue;
this.tb.Text = postedValue;
return true;
}
return false;
}
#endregion
}
public class RequiredFieldTypeControlsConverter : StringConverter
{
public RequiredFieldTypeControlsConverter() { }
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
ArrayList controlsArray = new ArrayList();
controlsArray.Add("暂无校验");
controlsArray.Add("数据校验");
controlsArray.Add("电子邮箱");
controlsArray.Add("移动手机");
controlsArray.Add("家用电话");
controlsArray.Add("身份证号码");
controlsArray.Add("网页地址");
controlsArray.Add("日期");
controlsArray.Add("日期时间");
controlsArray.Add("金额");
controlsArray.Add("IP地址");
controlsArray.Add("IP地址带端口");
return new StandardValuesCollection(controlsArray);
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false;
}
}
public class CanBeNullControlsConverter : StringConverter
{
public CanBeNullControlsConverter() { }
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
ArrayList controlsArray = new ArrayList();
controlsArray.Add("可为空");
controlsArray.Add("必填");
return new StandardValuesCollection(controlsArray);
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false;
}
}
public class FormControlsConverter : StringConverter
{
public FormControlsConverter()
{
}
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
ControlCollection Controls = ((Page)context.Container.Components[0]).Controls;
ArrayList controlsArray = new ArrayList();
for (int i = 0; i < Controls.Count; i++)
{
if ((Controls[i] is HtmlTable
|| Controls[i] is HtmlForm
|| Controls[i] is HtmlGenericControl
|| Controls[i] is HtmlImage
|| Controls[i] is Label
|| Controls[i] is DataGrid
|| Controls[i] is DataList
|| Controls[i] is Table
|| Controls[i] is Repeater
|| Controls[i] is Image
|| Controls[i] is Panel
|| Controls[i] is PlaceHolder
|| Controls[i] is Calendar
|| Controls[i] is AdRotator
|| Controls[i] is Xml
))
{
controlsArray.Add(Controls[i].ClientID);
}
}
return new StandardValuesCollection(controlsArray);
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false;
}
}
愿一路奔跑不退缩,到目前一直从事.Net的B/S,C/S企业应用研发