using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Text.RegularExpressions ;
namespace MyWinControl
{
/// <summary>
/// UserControl1 的摘要说明。
/// </summary>
public class lblTextBox : System.Windows.Forms.UserControl
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Splitter splitter1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.ToolTip toolTip1;
private System.ComponentModel.IContainer components;
public lblTextBox()
{
// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent();
// TODO: 在 InitComponent 调用后添加任何初始化
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if( components != null )
components.Dispose();
}
base.Dispose( disposing );
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.label1 = new System.Windows.Forms.Label();
this.splitter1 = new System.Windows.Forms.Splitter();
this.textBox1 = new System.Windows.Forms.TextBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.SuspendLayout();
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Left;
this.label1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.label1.Location = new System.Drawing.Point(0, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(60, 24);
this.label1.TabIndex = 1;
this.label1.Text = "labelText";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// splitter1
//
this.splitter1.Location = new System.Drawing.Point(60, 0);
this.splitter1.Name = "splitter1";
this.splitter1.Size = new System.Drawing.Size(24, 24);
this.splitter1.TabIndex = 2;
this.splitter1.TabStop = false;
this.splitter1.Visible = false;
//
// textBox1
//
this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.textBox1.Location = new System.Drawing.Point(84, 0);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(116, 21);
this.textBox1.TabIndex = 3;
this.textBox1.Text = "textBox1";
this.textBox1.LostFocus += new System.EventHandler(this.textBox1_LostFocus);
this.textBox1.GotFocus += new System.EventHandler(this.textBox1_GotFocus);
this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
//
// lblTextBox
//
this.Controls.Add(this.textBox1);
this.Controls.Add(this.splitter1);
this.Controls.Add(this.label1);
this.Name = "lblTextBox";
this.Size = new System.Drawing.Size(200, 24);
this.GotFocus += new System.EventHandler(this.lblTextBox_GotFocus);
this.ResumeLayout(false);
}
#endregion
#region//属性
[
Category("Appearance"),
Description("标签的宽度"),
DefaultValue(100),
Bindable(true),
]
public int lblWidth
{
get
{
return label1.Width ;
}
set
{
label1.Width=value;
// //Raise property changed event for DrawingMode
// OnDrawingModeChanged(EventArgs.Empty);
}
}
[
Category("Appearance"),
Description("标签的内容"),
DefaultValue("标签"),
Bindable(true),
]
public string lblCaption
{
get
{
return label1.Text ;
}
set
{
label1.Text=value;
}
}
[
Category("Appearance"),
Description("文本框的内容"),
DefaultValue("text"),
Bindable(true),
]
public string textBoxText
{
get
{
return textBox1.Text ;
}
set
{
textBox1.Text=value;
}
}
[
Category("Appearance"),
Description("文本框是否为密码"),
//DefaultValue(false),
Bindable(true),
]
public char textBoxTextpass
{
// get
// {
// //return textBox1.PasswordChar ;
// }
set
{
textBox1.PasswordChar=value;
}
}
[
Category("Appearance"),
Description("判断输入的字符"),
DefaultValue(TextType.All),
Bindable(true),
]
public TextType textType
{
get
{
return TtextType ;
}
set
{
TtextType=value;
}
}
[
Category("Appearance"),
Description("文本框最大长度"),
DefaultValue(0),
Bindable(true),
]
public int MaxLength
{
get
{
return textBox1.MaxLength ;
}
set
{
textBox1.MaxLength=value;
}
}
[
Category("Appearance"),
Description("文本数据最大值"),
DefaultValue(0),
Bindable(true),
]
public int max
{
get
{
return tmax ;
}
set
{
tmax=value;
}
}
[
Category("Appearance"),
Description("文本数据最小值"),
DefaultValue(0),
Bindable(true),
]
public int min
{
get
{
return tmin ;
}
set
{
tmin=value;
}
}
[
Category("Appearance"),
Description("文本可编辑性"),
//DefaultValue(0),
Bindable(true),
]
public bool textEnabled
{
get
{
return textBox1.Enabled ;
}
set
{
textBox1.Enabled=value;
}
}
[
Category("Appearance"),
Description("帮助文件"),
DefaultValue("※help※"),
Bindable(true),
]
public string textHelp
{
get
{
return ttextHelp ;
}
set
{
ttextHelp=value;
}
}
[
Category("Appearance"),
Description("按回车是否换焦点"),
DefaultValue(true),
Bindable(true),
]
public bool EnterToTap
{
get
{
return tEnterToTap;
}
set
{
tEnterToTap=value;
}
}
#endregion
#region//方法
private bool isNumeric(char ch)
{
if(char.IsNumber(ch))
{
return true;
}
return false;
}
private bool isLetter(char ch)
{
if (char.IsLetter(ch))
{
return true;
}
return false;
}
private bool isNumericorLetter(char ch)
{
if (char.IsLetterOrDigit(ch))
{
return true;
}
return false;
}
#endregion
#region//自带事件
internal void textBox1_TextChanged(object sender, System.EventArgs e)
{
// Regex DoubleQuotedString = new Regex("/[^\d]/g,''",System.Text.RegularExpressions.RegexOptions.None );
OnlblTextChanged(this,new EventArgs());
//textBox1.Text.Replace("",(char)Keys.Cancel);
}
internal void textBox1_LostFocus(object sender, EventArgs e)
{
char[] tmps;
tmps =textBox1.Text.ToCharArray();
switch (TtextType)
{
case TextType.Letter:
case TextType.Numberic:
case TextType.NumericorLetter:
foreach(char tmp in tmps)
{
if (char.IsDigit(tmp)|| char.IsLetter(tmp))
{
//tmp =(char)(Keys.Cancel);
}
else
{
textBox1.Text="";
}
}
break;
case TextType.decimalfraction :
break;
default:
break;
}
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
/*/////////////////////////////////////////
///****************************************
///判断输入的是不是数字、字母 //
///TextType.Numberic: 数字 //
///TextType.NumericorLetter :字母 //
///TextType.NumericorLetter: //
********************************************
*//////////////////////////////////////////
switch(e.KeyChar)
{
case (char)( Keys.Back) :
break;
case (char)(Keys.Enter) :
if(tEnterToTap)
SendKeys.Send("{TAB}");
break;
default:
switch(TtextType)
{
case TextType.Numberic :
if (!isNumeric(e.KeyChar)|e.KeyChar.Equals(Keys.Back))
{ //Int16.MaxValue
e.Handled =true;
break;
}
if (tmax != 0)
{
if( textBox1.Text.Length >0)
{
if(int.Parse(textBox1.Text+e.KeyChar.ToString())>tmax)
{e.Handled =true;
break;
}
}
}
if (tmin != 0)
{
if( textBox1.Text.Length >0)
{
if(int.Parse(textBox1.Text)<tmin)
{
e.Handled =true;
break;
}
}
}
break;
case TextType.Letter :
if (!isLetter(e.KeyChar))
e.Handled =true;
//SendKeys.Send("/");
break;
case TextType.NumericorLetter :
if (!isNumericorLetter(e.KeyChar))
e.Handled =true;
break;
case TextType.decimalfraction :
if(!char.IsDigit(e.KeyChar))
if(e.KeyChar=='.' )
{
if(textBox1.Text.IndexOf('.')!=-1)
e.Handled =true;
}
else
{
e.Handled =true;
}
break;
case TextType.All :
default:
break;
}
break;
}
}
#endregion
#region //自定义事件
public event MyEvent lblTextChanged;
public delegate void MyEvent(object sender,System.EventArgs e);
protected virtual void OnlblTextChanged(object sender ,System.EventArgs e)
{
if (lblTextChanged!=null)
lblTextChanged(this,e);
}
#endregion
#region//枚举
public enum TextType
{
All,
Numberic,
Letter,
NumericorLetter,
decimalfraction
}
#endregion
public TextType TtextType;
internal int tmax;//文本框最大值
internal int tmin;//最小值
internal string ttextHelp;//帮助内容
internal bool tEnterToTap =true;//按回车转到换行
private void textBox1_GotFocus(object sender, EventArgs e)
{
this.toolTip1.SetToolTip(this.textBox1,ttextHelp);
if( TtextType !=TextType.All )
textBox1.ImeMode =System.Windows.Forms.ImeMode.Disable ;
}
private void lblTextBox_GotFocus(object sender, EventArgs e)
{
textBox1.Select();
}
}
}