1 一些常用属性
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属性
这个集合。
可以通过直接属性值来实现自动完成,也可以用代码实现,用代码如下:
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事件实现
{
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事件的验证条件,则窗体将无法关闭。
一个例子:
private void txtUserName_Validating( object sender, CancelEventArgs e)
{
if ( this .txtUserName.Text == string .Empty)
{
errorProvider1.SetError(txtUserName, " 姓名不能为空! " );
e.Cancel = true ;
}
else
{
errorProvider1.SetError(txtUserName, "" );
}
另一个例子:
{
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",以便让你设定某个控件的工具提示信息。