textbox控件(winform之textBox)
一、Winform 的所有TextBox 的TextChange事件
自定义一个新的TextBox控件,派生自TextBox控件,重载需要的方法和事件,修改所有文本框基于新的TextBox控件。下面是一个自定义TextBox控件的例子:
TextBox控件重写之NumTextBox,主要实现的功能是,只允许输入数字,或String,Numeric,Currency,Decimal,Float,Double,Short,Int,Long等加了一个属性InputType可以设置其,还可以自己进一步扩展,因为是开源的。 public enum NumTextBoxType
{
String,//是这个的时候,什么都不处理,跟正常TextBox一样
Numeric,//只要是数字就行
Currency,
Decimal,
Float,
Double,
Short,
Int,
Long
}主要代码:
using System;
using System.Windows.Forms;
using System.ComponentModel;
using System.Text.RegularExpressions;
namespace YongFa365.Controls.NumTextBox
{
public class NumTextBox: TextBox
{
private NumTextBoxType inputType= NumTextBoxType.Numeric;
public enum NumTextBoxType
{
String,//是这个的时候,什么都不处理,跟正常TextBox一样
Numeric,//只要是数字就行
Currency,
Decimal,
Float,
Double,
Short,
Int,
Long
}
public NumTextBox()
{
this.ContextMenu= new ContextMenu();
}
[
Category("专用设置"),
DefaultValue(NumTextBoxType.Numeric),
Description("设置允许类型:\nString跟普通TextBox功能一样\nNumeric只要是数字就可以")
]
public NumTextBoxType InputType
{
get{ return inputType;}
set{ inputType= value;}
}
public override string Text
{
get{ return base.Text;}
set
{
if(IsValid(value, true))
{
base.Text= value;
}
}
}
private bool IsValid(string val, bool use)
{
bool ret= true;
if(string.IsNullOrEmpty(val))
{
return ret;
}
if(use)
{
if(val.Equals("-")&& inputType!= NumTextBoxType.Numeric)
{
return ret;
}
}
try
{
switch(inputType)
{
case NumTextBoxType.String:
break;
case NumTextBoxType.Numeric:
if(!Regex.IsMatch(val,@"^\d*$"))
{
ret= false;
}
break;
case NumTextBoxType.Currency:
decimal dec= decimal.Parse(val);
int pos= val.IndexOf(".");
if(pos!=-1)
{
ret= val.Substring(pos).Length<= 3;
}
break;
case NumTextBoxType.Float:
float flt= float.Parse(val);
break;
case NumTextBoxType.Double:
double dbl= double.Parse(val);
break;
case NumTextBoxType.Decimal:
decimal dec2= decimal.Parse(val);
break;
case NumTextBoxType.Short:
short s= short.Parse(val);
break;
case NumTextBoxType.Int:
int i= int.Parse(val);
break;
case NumTextBoxType.Long:
long l= long.Parse(val);
break;
default:
throw new ApplicationException();
}
}
catch
{
ret= false;
}
return ret;
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if(keyData==(Keys)Shortcut.CtrlV|| keyData==(Keys)Shortcut.ShiftIns)
{
IDataObject iData= Clipboard.GetDataObject();
string newText;
newText= base.Text.Substring(0, base.SelectionStart)
+(string)iData.GetData(DataFormats.Text)
+ base.Text.Substring(base.SelectionStart+ base.SelectionLength);
if(!IsValid(newText, true))
{
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
protected override void OnLeave(EventArgs e)
{
if(!(inputType== NumTextBoxType.Numeric|| inputType== NumTextBoxType.String))
{
if(base.Text!="")
{
if(!IsValid(base.Text, false))
{
base.Text="";
}
else if(Double.Parse(base.Text)== 0)
{
base.Text="0";
}
}
}
base.OnLeave(e);
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if(inputType!= NumTextBoxType.String)
{
char c= e.KeyChar;
if(!Char.IsControl(c))
{
if(c.ToString()=="")
{
e.Handled= true;
return;
}
string newText= base.Text.Substring(0, base.SelectionStart)
+ c.ToString()+ base.Text.Substring(base.SelectionStart+ base.SelectionLength);
if(!IsValid(newText, true))
{
e.Handled= true;
}
}
}
base.OnKeyPress(e);
}
}
}
二、winform控件textbox怎样显示txt内容
winform控件textbox选择txt模式就可显示txt内容。WinForm控件是指以输入或操作数据的对象。比如ComponentOne是.net平台下对数据和方法的封装,有自己的属性和方法。属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能,包含在.NETFramework中的Windows窗体类旨在用于GUI开发,可以轻松创建具有适应多变的商业需求所需的灵活性的命令窗口、按钮、菜单、工具栏和其他屏幕元素。
三、怎样在winform中控制textbox的大小
有两种控制textbox大小的方法:
设计时修改
在设计窗体时,用鼠标拖动控制柄,来调节textbox的大小。在设计期间的修改最终反应到运行时的结果,因此这种方法在运行期间是固定大小的。
代码修改
如果在程序运行期间需要调整控件大小(宽度或高度),可以使用以下代码修改即可:
textBox1.Width=textbox1.Width+10;//将宽度增加10像素。
textBox1.Height=textBox1.Height+3;//将调度增加3像素。