社区
C#
帖子详情
TextBox 控件的扩展, Help!!!
honghuali
2008-12-12 01:23:46
扩展功能(WEB项目中):
1.新增下拉功能, 下拉显示的数据从数据库中读取,
2.TextBox里的文本, 即可以自己输入, 也可以从下拉选择。
望有经验的朋友, 给点思路, 最好有实例。
多谢!
...全文
191
9
打赏
收藏
TextBox 控件的扩展, Help!!!
扩展功能(WEB项目中): 1.新增下拉功能, 下拉显示的数据从数据库中读取, 2.TextBox里的文本, 即可以自己输入, 也可以从下拉选择。 望有经验的朋友, 给点思路, 最好有实例。 多谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wb186
2008-12-12
打赏
举报
回复
呵呵 楼主肯定知道combobox滴!所以……
5楼很强
wengjj1985
2008-12-12
打赏
举报
回复
combobox
c11_11_11
2008-12-12
打赏
举报
回复
/**/
/// <summary>
/// 根据设置的验证数据类型返回不同的正则表达式样
/// </summary>
/// <returns></returns>
#region GetRegex
private string GetValidRegex()
{
string regex = @"(\S)";
switch (this.ValidType)
{
case DataType.Never:
break;
case DataType.Int:
error = "*必须为整数";
regex = @"(-)?(\d+)";
break;
case DataType.IntPostive:
error = "*必须为大于0的整数";
regex = @"([1-9]{1}\d*)";
break;
case DataType.IntZeroPostive:
error = "*必须为不小于0的整数";
regex = @"(\d+)";
break;
case DataType.Float:
error = "*必须为数字";
regex = @"(-)?(\d+)(((\.)(\d)+))?";
break;
case DataType.FloatPostive:
error = "*必须为大于0的数字";
regex = @"(\d+)(((\.)(\d)+))?";
break;
case DataType.FloatZeroPostive:
error = "*必须为不小于0的数字";
regex = @"(\d+)(((\.)(\d)+))?";
break;
case DataType.Url:
error = "*URL格式错误";
regex = @"(http://)?([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
break;
case DataType.Mail:
error = "*EMail格式错误";
regex = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
break;
case DataType.ChineseChars:
error = "*只能输入中文字符";
regex = @"[\u4e00-\u9fa5]*";
break;
case DataType.EnglishChars:
error = "*只能输入英文字符";
regex = @"[a-zA-Z]*";
break;
case DataType.EngNum:
error = "*只能输入英文字符和数字";
regex = @"[a-zA-Z0-9]*";
break;
case DataType.EngNumUnerline:
error = "*只能输入英文字符、数字和下划线";
regex = @"[a-zA-Z0-9_]*";
break;
case DataType.PhoneNumber:
error = "*电话号码格式错误";
regex = @"\d{3,4}-\d{7,8}(-\d{1,4})?";
//regex = @"(0\d{2,3})?(-)?(\d{7,8})(-)?(\d{1,5})?";
break;
case DataType.MobileNumber:
error = "*手机号码格式错误";
regex = @"(0)?(1)\d{10}";
break;
case DataType.PostalCode:
error = "*邮编格式错误";
regex = @"\d{6}";
break;
case DataType.Date:
error = "*日期格式错误(YYYY-MM-DD)";
regex = @"^(((((0[48]00)|(0[1-9]((0[48])|([2468][048])|([13579][26]))))-02-29)|((0[1-9][0-9][0-9])-((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30))|(((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-8])))))))|((((((([13579][26])|([2468][048]))00)|([1-9][0-9]((0[48])|([13579][26])|([2468][048]))))-02-29)|(([1-9][0-9][0-9][0-9])-((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30))|(((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-8])))))))|((((00((0[48])|([2468][048])|([13579][26])))-02-29)|((00((0[1-9])|([1-9][0-9])))-((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30))|(((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-8])))))))$";
break;
case DataType.IdentityCode:
error = "*身份证号码格式错误";
regex = @"\d{18}";
break;
case DataType.QQ:
error = "*QQ号码格式错误";
regex = @"[1-9][0-9]{4,}";
break;
case DataType.IP:
error = "*IP地址格式错误";
regex = @"\d+\.\d+\.\d+\.\d+";
break;
case DataType.Custom:
error = "*格式错误";
regex = this.ValidExpressionCustom;
break;
default:
break;
}
if (this.ValidError.Trim() != "")
error = this.ValidError;
return regex;
}
#endregion
#region 将此控件呈现给指定的输出参数
/**/
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
base.Render(output);
output.Write(" ");
// base.
if (!this.AllowEmpty)
{
this.rfvDataInput.ID = "rfv" + base.ID;
this.rfvDataInput.ControlToValidate = base.ID;
//output.
//this.Attributes.Add("onfocus", "WdatePicker({isShowWeek:true})");
this.rfvDataInput.RenderControl(output);
}
if (this.ValidType != DataType.Never && this.ValidType != DataType.String)
{
this.revDataInput.ID = "rev" + base.ID;
this.revDataInput.ControlToValidate = base.ID;
this.revDataInput.ValidationExpression = this.GetValidRegex();
this.revDataInput.ErrorMessage = error;
// this.Attributes.Add("onfocus", "WdatePicker({isShowWeek:true})");
this.revDataInput.RenderControl(output);
}
//output.WriteAttribute
}
#endregion
}
}
c11_11_11
2008-12-12
打赏
举报
回复
[Category("自定义信息区")]
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体删除线"), NotifyParentProperty(true)]
public bool ValidateFontStrikeout
{
get
{
if (ViewState["ValidateFontStrikeout"] != null)
return (bool)ViewState["ValidateFontStrikeout"];
return false;
}
set { ViewState["ValidateFontStrikeout"] = value; }
}
[Category("自定义信息区")]
[DefaultValue(""), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的CSSClass属性"), NotifyParentProperty(true)]
public string ValidateCSSClass
{
get
{
if (ViewState["ValidateCSSClass"] != null)
return ViewState["ValidateCSSClass"].ToString();
return string.Empty;
}
set { ViewState["ValidateCSSClass"] = value; }
}
[Category("自定义信息区")]
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体下划线"), NotifyParentProperty(true)]
public bool ValidateFontUnderline
{
get
{
if (ViewState["ValidateFontUnderline"] != null)
return (bool)ViewState["ValidateFontUnderline"];
return false;
}
set { ViewState["ValidateFontUnderline"] = value; }
}
[Category("自定义信息区"), DefaultValue(""), Description("验证控件的字体名")]
[Editor("System.Drawing.Design.FontNameEditor, System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor)), TypeConverter(typeof(FontConverter.FontNameConverter))]
public string ValidateFontName
{
get
{
if (ViewState["ValidateFontName"] != null)
return (string)ViewState["ValidateFontName"];
return string.Empty;
}
set
{
ViewState["ValidateFontName"] = value;
}
}
#endregion
#region 构造函数
public xxxTextBox() { }
#endregion
#region 重写子控件
protected override void EnsureChildControls()
{
this.rfvDataInput.CssClass = this.CssError;
this.rfvDataInput.ErrorMessage = "*输入不能为空";
this.rfvDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
this.rfvDataInput.EnableViewState = true;
this.rfvDataInput.ControlToValidate = base.ID;
this.rfvDataInput.ForeColor = ValidateForeColor;
this.rfvDataInput.BackColor = ValidateBackColor;
if (ValidateFontSize != null)
{
this.rfvDataInput.Font.Size = ValidateFontSize;
}
this.rfvDataInput.Font.Bold = ValidateFontBold;
this.rfvDataInput.Font.Italic = ValidateFontItalic;
this.rfvDataInput.Font.Strikeout = ValidateFontStrikeout;
this.rfvDataInput.Font.Overline = ValidateFontOverLine;
this.rfvDataInput.Font.Underline = ValidateFontUnderline;
if (!string.IsNullOrEmpty(ValidateFontName))
this.rfvDataInput.Font.Name = ValidateFontName;
if (!string.IsNullOrEmpty(ValidateCSSClass))
this.rfvDataInput.CssClass = ValidateCSSClass;
this.revDataInput.CssClass = this.CssError;
this.revDataInput.ErrorMessage = "*输入格式错误";
this.revDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
this.revDataInput.EnableViewState = true;
this.revDataInput.ControlToValidate = base.ID;
this.revDataInput.ForeColor = ValidateForeColor;
this.revDataInput.BackColor = ValidateBackColor;
if (ValidateFontSize != null)
{
this.revDataInput.Font.Size = ValidateFontSize;
}
this.revDataInput.Font.Bold = ValidateFontBold;
this.revDataInput.Font.Bold = ValidateFontBold;
this.revDataInput.Font.Italic = ValidateFontItalic;
this.revDataInput.Font.Strikeout = ValidateFontStrikeout;
this.revDataInput.Font.Overline = ValidateFontOverLine;
this.revDataInput.Font.Underline = ValidateFontUnderline;
if (!string.IsNullOrEmpty(ValidateFontName))
this.revDataInput.Font.Name = ValidateFontName;
if (!string.IsNullOrEmpty(ValidateCSSClass))
this.revDataInput.CssClass = ValidateCSSClass;
//将子控件添加到此自定义控件中
this.Controls.Add(rfvDataInput);
this.Controls.Add(revDataInput);
this.Controls.Add(pnlFrame);
if (this.ValidType == DataType.Date)
this.Attributes.Add("onfocus", "WdatePicker({isShowClear:false,readOnly:true})");
}
#endregion
c11_11_11
2008-12-12
打赏
举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Design;
namespace xxx.Web.Control.xxxTextBox
{
/**/
/// <summary>
/// author rual by 2008-8-10
/// 重写的TextBox控件
/// <summary>
#region 枚举数据
/**/
/// <summary>
/// 验证数据类型
/// </summary>
public enum DataType
{
Never, //不验证
String, //字符串
Int, //整数
IntPostive, //大于0的整数
IntZeroPostive, //大于等于0的整数
Float, //数字
FloatPostive, //大于0的数字
FloatZeroPostive, //大于等于0的数字
Url,//URL 验证
Mail,//邮件验证
Date, //日期
ChineseChars, //汉字字符串
EnglishChars, //英文
EngNum, //英文和数字
EngNumUnerline, //英文、数字和下划线
PhoneNumber, //电话号码
MobileNumber, //手机号码
PostalCode, //邮政编码
QQ, //QQ号码
IdentityCode, //身份证号码
IP, //IP地址
Custom//自定义验证
}
#endregion
/**/
/// Attribute DefaultProperty指定组件的默认属性,ToolboxData指定当从IDE工具中的工具箱中拖动自定义控件时为它生成的默认标记
[DefaultProperty("AllowEmpty"), ToolboxData("<{0}:xxxTextBox runat=server></{0}:xxxTextBox>")]
public class xxxTextBox : System.Web.UI.WebControls.TextBox
{
#region 子控件
//private System.Web.UI.WebControls.TextBox txtDataInput = new TextBox();
private System.Web.UI.WebControls.RequiredFieldValidator rfvDataInput = new RequiredFieldValidator();
private System.Web.UI.WebControls.RegularExpressionValidator revDataInput = new RegularExpressionValidator();
private Panel pnlFrame = new Panel(); //承载其它控件的容器Panel控件
#endregion
private string error = "";
#region 控件自定义属性
[Bindable(true)]
[Category("自定义信息区")]
[Browsable(true)]
[Description("是否允许空值")]
[DefaultValue("true")]
public bool AllowEmpty
{
get { return ViewState["AllowEmpty"] == null ? true : (bool)ViewState["AllowEmpty"]; }
set { ViewState["AllowEmpty"] = value; }
}
[Bindable(true)]
[Category("自定义信息区")]
[Browsable(true)]
[Description("验证数据类型,默认为不验证")]
[DefaultValue("IntPostive")]
public DataType ValidType
{
get { return ViewState["ValidType"] == null ? DataType.Never : (DataType)ViewState["ValidType"]; }
set { ViewState["ValidType"] = value; }
}
[Bindable(true)]
[Browsable(true)]
[Category("自定义信息区")]
[Description("自定义验证错误信息")]
[DefaultValue("")]
public string ValidError
{
get { return ViewState["ValidError"] == null ? "" : (string)ViewState["ValidError"]; }
set { ViewState["ValidError"] = value; }
}
[Bindable(true)]
[Browsable(true)]
[Category("自定义信息区")]
[Description("自定义用于验证的正则表达式,ValidType 为 Custom 时有效")]
[DefaultValue("")]
public string ValidExpressionCustom
{
get { return ViewState["ValidExpressionCustom"] == null ? "" : (string)ViewState["ValidExpressionCustom"]; }
set { ViewState["ValidExpressionCustom"] = value; }
}
[Bindable(true)]
[Browsable(true)]
[Category("自定义信息区")]
[Description("错误信息提示的CSS类名")]
[DefaultValue("")]
public string CssError
{
get { return ViewState["CssError"] == null ? "" : (string)ViewState["CssError"]; }
set { ViewState["CssError"] = value; }
}
[Bindable(true)]
[Browsable(true)]
[Category("自定义信息区")]
[Description("验证控件的前景色")]
[DefaultValue("")]
public Color ValidateForeColor
{
get
{
if (ViewState["ValidateForeColor"] == null)
return Color.Red;
return (Color)ViewState["ValidateForeColor"];
}
set { ViewState["ValidateForeColor"] = value; }
}
[Bindable(true)]
[Browsable(true)]
[Category("自定义信息区")]
[Description("验证控件的背景色")]
[DefaultValue("")]
public Color ValidateBackColor
{
get
{
if (ViewState["ValidateBackColor"] == null)
return Color.Transparent;
return (Color)ViewState["ValidateBackColor"];
}
set { ViewState["ValidateBackColor"] = value; }
}
[Category("自定义信息区")]
[DefaultValue(""), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体大小"), NotifyParentProperty(true)]
public FontUnit ValidateFontSize
{
get
{
if (ViewState["ValidateFontSize"] != null)
return (FontUnit)ViewState["ValidateFontSize"];
return FontUnit.Point(10);
}
set { ViewState["ValidateFontSize"] = value; }
}
[Category("自定义信息区")]
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体加粗"), NotifyParentProperty(true)]
public bool ValidateFontBold
{
get
{
if (ViewState["ValidateFontBold"] != null)
return (bool)ViewState["ValidateFontBold"];
return false;
}
set { ViewState["ValidateFontBold"] = value; }
}
[Category("自定义信息区")]
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体斜体"), NotifyParentProperty(true)]
public bool ValidateFontItalic
{
get
{
if (ViewState["ValidateFontItalic"] != null)
return (bool)ViewState["ValidateFontItalic"];
return false;
}
set { ViewState["ValidateFontItalic"] = value; }
}
[Category("自定义信息区")]
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体上划线"), NotifyParentProperty(true)]
public bool ValidateFontOverLine
{
get
{
if (ViewState["ValidateFontOverLine"] != null)
return (bool)ViewState["ValidateFontOverLine"];
return false;
}
set { ViewState["ValidateFontOverLine"] = value; }
}
c11_11_11
2008-12-12
打赏
举报
回复
请试用ajaxtoolkit 中的autocomplete 控件
wuyq11
2008-12-12
打赏
举报
回复
重写textbox属性和事件
参考
http://www.cnblogs.com/honliv/articles/809353.html
http://www.cnblogs.com/admin11/articles/1259577.html
colincat2004
2008-12-12
打赏
举报
回复
奇怪,为什么不用combobox来实现?那样更为方便吧?什么下拉效果和从数据库查出来的匹配项不都有地方显示了?
cyqlightrain
2008-12-12
打赏
举报
回复
呵呵,你有想法.
大部分见过的都是用Div模拟出来的效果!像google的search.
VB
控件
使用大全.rar
9. **
控件
的自定义和
扩展
**:通过继承或创建新的UserControl,开发者可以创建具有特定功能的自定义
控件
。 10. **编程实践**:通过实例代码,学习如何在VB程序中添加、配置
控件
,编写事件处理函数,以及如何与其他...
vb
控件
大全
VB提供了许多内置
控件
,如按钮(Button)、文本框(
TextBox
)、标签(Label)、列表框(ListBox)和复选框(CheckBox)等,这些
控件
可以方便地拖放到窗体上,通过编写事件处理代码来实现特定功能。 "ocx.CHM" 文件...
Visual Basic 6编程技术大全 中译本扫描版带书签 2/2
3.1.7多行
TextBox
控件
69 3.2 Label和Frame
控件
70 3.2.1 Label
控件
70 3.2.2 Frame
控件
71 3.3 CommandButton、CheckBox和 OptionButton
控件
71 3.3.1 CommandButton
控件
72 3.3.2 CheckBox
控件
72 3.3.3 OptionButton
控件
...
Visual Basic 6编程技术大全 中译本扫描版带书签 1/2
3.1.7多行
TextBox
控件
69 3.2 Label和Frame
控件
70 3.2.1 Label
控件
70 3.2.2 Frame
控件
71 3.3 CommandButton、CheckBox和 OptionButton
控件
71 3.3.1 CommandButton
控件
72 3.3.2 CheckBox
控件
72 3.3.3 OptionButton
控件
...
Office2013FluentUserInterfaceControlIdentifiers
3. **
控件
(Control)**:包括按钮(Button)、复选框(CheckBox)、下拉列表(DropDown)、编辑框(
TextBox
)等,每个
控件
都有一个特定的控制ID。 在"Office UI
Help
Files"这个压缩包中,很可能包含了关于Office...
C#
111,131
社区成员
642,542
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章