WinForm中TextBox的几个基本技巧

原创 2007年09月24日 14:26:00

1  一些常用属性

this.textBox5.PasswordChar = '@';  //密码的样式
            this.textBox5.UseSystemPasswordChar = true; //如果这个属性为true,则密码就和系统默认的密码样式相同,而PasswordChar属性不起作用.
            this.textBox5.Multiline = true;   //多行显示
            this.textBox5.WordWrap = true;  //自动换行
            this.textBox5.ScrollBars = ScrollBars.Vertical; //显示垂直滚动条。ScrollBars的枚举值之一。
            this.textBox5.MaxLength = 100;//在文本框中输入的最大字符数。

2  实现自动完成功能,提高用户体验

        想实现自动完成,就必须明白三个属性:

       AutoCompleteSource属性: 设置自动完成的来源。此属性的值为AutoCompleteSource枚举值之一 

       AutoCompleteMode属性:设置自动完成的显示模式。此属性的值为AutoCompleteMode枚举值之一

       AutoCompleteCustomSource属性:自定义完成来源。当AutoCompleteSource属性值为CustomSource时,此

      属性才起做用。属性值为AutoCompleteStringCollection集合对象,可以通过AutoCompleteCustomSource属性

      这个集合。

      可以通过直接属性值来实现自动完成,也可以用代码实现,用代码如下:

 

AutoCompleteStringCollection myCutomSource = new AutoCompleteStringCollection();
            myCutomSource.AddRange(
new string[]{"成都市东门","成都市北门","成都市西门","成都市南门"});
            
this.textBox5.AutoCompleteSource = AutoCompleteSource.CustomSource;
            
this.textBox5.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            
this.textBox5.AutoCompleteCustomSource = myCutomSource;

3  TextBox控件中的字符在输入同时立即转换为大写或小写

方法一:通过CharacterCasing属性来实现。此属性默认的值为Normal,意思是字符的大小写不会改变。还有2个属性值:Upper和Lower。

方法二:通过TextBox的KeyPress事件实现

 

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
        {
            
if (char.IsLower(e.KeyChar))
            {
                textBox3.SelectedText 
= char.ToUpper(e.KeyChar).ToString();
                e.Handled 
= true;
            }
        }

4  验证用户输入,增加用户体验

    基本的思路是:首先,使用控件的Validating事件来验证用户的输入。其次,当输入值不符合要求时,用ErrorProvider控件通知用户或者用MessageBox以弹出对话框的形式通知用户。显然用RrrorProvider控件通知用户更具用户体验性。

注意:只有当控件的CauseValidation属性被设置为True(此为默认值)时,才会引发Validating事件。同时必须知道Validating事件会在控件失去焦点之前引发。Validating事件会提供 CancelEventArgs参数,可以让你通过设置其Cancel属性来告知该控件中的数据是否有效,如果你把Cancel属性设置为True(表示控件中的数据无效),则焦点会保持在数据无效的控件上;如果你把Cancel属性保持默认值False(表示控件中的数据有效),则接下来会引发Validated事件,而且焦点也会转移到新的控件上去。

注意:焦点所前往的控件的CauseValidation属性的设置值也会决定焦点原先所在控件的Validating事件是否要被引发。如果焦点所前往的控件的CauseValidation属性的值为False,则焦点原先所在控件的Validating事件不会被引发,如果焦点所前往的控件的CauseValidation属性的值为True,则焦点原先所在控件的Validating事件被引发。这样的好处是增加了灵活性而且也不会遗漏任何验证操作。此外只要窗体中任何一个控件的输入值无法通过Validating事件的验证条件,则窗体将无法关闭。

一个例子:

//必须要从工具箱组件中把ErrorProvider控件拖到窗体上,不管眼验证多少控件,只需要一个ErrorProvider控件就OK了
private void txtUserName_Validating(object sender, CancelEventArgs e)
        {
            
if (this.txtUserName.Text == string.Empty)
            {
                errorProvider1.SetError(txtUserName, 
"姓名不能为空!");
                e.Cancel 
= true;
            }
            
else
            {
                errorProvider1.SetError(txtUserName, 
"");
            }

另一个例子:

 private void txtPhone_Validating(object sender, CancelEventArgs e)
        {
            Regex re 
= new Regex(@"^(d{3})d{4}d{4}$");
            
if (!re.IsMatch(txtPhone.Text))
            {
                errorProvider1.SetError(txtPhone, 
"电话号码必须符合(xxx) xxxx xxx 的格式。");
                e.Cancel 
= true;//当输入的值不符合要求时候,将不允许移出该控件
            }
            
else
            {
                errorProvider1.SetError(txtPhone, 
"");
            }
        }

最后注意一点:ErrorProvider这种控件很像是一种“扩展性提供者”。为什么这样说呢?当你把一个ErrorProvider控件拖到窗体上时,你会发现,原来窗体上的控件多出了三个属性:errorProvider1 上的 Error、errorProvider1 上的 IconAlignment、errorProvider1 上的 IconPadding。像ErrorProvider这样的控件还有ToolTip控件等,一旦你将一个ToolTip控件加入窗体后,窗体上的所有控件就会多出一个"toolTip1 上的ToolTip",以便让你设定某个控件的工具提示信息。

 

winform 给textbox 增加 或 减小字体大小

private void btnAddFont_Click(object sender, EventArgs e) { float fSize = this.t...
  • keenweiwei
  • keenweiwei
  • 2014年07月10日 15:52
  • 1748

winform textbox 输入状态下隐藏光标

只能通过WINDOWS API的HideCaret函数来实现 HideCaret函数的申明: [DllImport("user32", EntryPoint = "HideCaret")]...
  • LOVE_GG
  • LOVE_GG
  • 2012年07月29日 18:30
  • 1579

在winform中向textbox输入内容时下面有提示信息,效果如图所示:

private void Form1_Load(object sender, EventArgs e)  {      AutoCompleteStringCollection strings...
  • A_post
  • A_post
  • 2012年02月23日 21:25
  • 938

C# TextBox增加Padding屬性,或者TextBox垂直居中

public partial class PubTextBox : TextBox     {         //设置Rect消息         private const int EM_SETR...
  • losedguest
  • losedguest
  • 2017年03月08日 15:39
  • 1962

winform中complete textbox,下拉自动完成控件

vs2005中textBox有AutoComplete的功能,但是在实际用到时发现效果并不太好。好像自动完成的数据源需要在窗体加载时就设置好,并不能根据textBox中实际输入的文本动态的查询数据库更...
  • qiujiahao
  • qiujiahao
  • 2009年12月22日 16:48
  • 8461

WinForm中TextBox的数据类型判断

由于需要,某TextBox的内容只能为数字,无奈TextBox.Text后面没有提供相应的方法.搜索之后,找到解决办法.try{      int.Parse(TextBox1.Text);     ...
  • Goofar
  • Goofar
  • 2007年03月15日 13:33
  • 1116

Winform的TextBox实现明文和密文的切换

Winform只需要将TextBox的PasswordChar属性设置为一个特殊字符,即可用于输入密码。但是,当用户输入了错误的密码时,删除所有的输入,再次重新输入就会显得有点麻烦,而且可能还会输错。...
  • softimite_zifeng
  • softimite_zifeng
  • 2017年01月08日 21:34
  • 2595

C#之WinForm基础 给textbox空间添加水平,垂直滚动条

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 1、添加水平、垂直滚动条 2、不自动换行 3...
  • yushaopu
  • yushaopu
  • 2016年09月17日 11:11
  • 3768

C#WinForm中支持透明的TextBox控件

C#WinForm中支持透明的TextBox控件
  • azuredrop
  • azuredrop
  • 2015年06月27日 16:18
  • 4077

C# WINFORM TEXTBOX水印效果

C# WinForm 给TextBox 加水印
  • wayyun
  • wayyun
  • 2014年09月18日 14:51
  • 1048
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WinForm中TextBox的几个基本技巧
举报原因:
原因补充:

(最多只允许输入30个字)