用TextBox类进行封装,是按钮控件外最常使用的控件,常用于接收文本输入。TextBox类派生于TextBoxBase类。
默认情况下,文本框控件只接受单行文本,此时只能水平改变控件大小而不能垂直改变。通过设置TextBox的Multiline属性为true,可以使用多行文本框。
文本框属性
- Text属性,获取用户输入到文本框中的文本。
- TextLength属性,获取文本框控件中文本的长度
- Lines属性,对于多行文本框,除了可以使用Text属性获取文本外,还可以使用Lines属性,它返回一个字符串的数组,每个数组元素对应一行文本。
注意:在Lines数组中的元素没有必要与文本框控件的物理行相对应。如果允许文本换行,那么无论文本占了多少物理行,在Lines数组中都只是一个元素。可以在属性窗口中使用Lines属性为多行文本框提供初始文本。在属性窗口中选择Lines属性,将显示一个说明为”…”的小按钮。单击它就会显示”字符串采集编辑器”对话框,在其中可以输入控件文本。
- ReadOnly属性:当它设置为true时,只能浏览而不能修改文本框中显示的内容。
- MaxLength属性:设置文本框能输入的最大字符数
- WordWrap属性:选择每行的文本是可以扩展超出控件边缘(false)或是在控件边界处自动换行(true),默认值为true。
- ScrollBars属性:指定是否使用以及使用怎样的滚动条。属性值必须是枚举类型ScrollBars的值:None、Horizontal(水平)、Vertical(垂直)、Both。
注意:如果文本框的WordWrap属性设置为true,则水平滚动条不显示
- BorderStyle属性:管理文本框控件的外观。属性值必须是枚举类型BorderStyle的值:None、FixedSingle、Fixed3D(默认值)。
- SelectedText、SelectionStart、SelectionLength属性:用来获取或设置当前在文本框中选择的文字。
例子:
1 2 3 4 |
textBox1.Text = "这是一个文本框控件"; textBox1.SelectionStart = 4; textBox1.SelectionLength = 3; string selection = textBox1.SelectedText; //selection的内容为"文本框" |
- PasswordChar属性:用来指定文本框的屏蔽字符。
- AcceptsReturn、AcceptsTab属性:通常情况下,不能在文本框中使用Enter键换行或是Tab键输入制表符,这两个键的默认行为是触发窗体的AcceptButton属性的Click事件和切换输入焦点。
AcceptsReturn属性,设置为true则在指定的控件中按下Enter键将会在其中新建一行文本;如果为false,则要按下Ctrl + Enter才能实现上述功能,如果只按下Enter将是激活窗体的默认按钮,如果没有设置窗体的默认按键,按下Enter还是会在新建一行文本。
AcceptsTab属性,设置为true则在指定的控件中按下Tab键时会在其中输入一个制表符;如果为false,则要使用Ctrl + Tab组合键来实现上述功能,单独按下Tab键只是切换焦点。
注意:如果文本框不支持多行输入,则这两个属性无效。
文本框的方法
- AppendText:向文本框中附加文字
- Clear:清除文本框中的所有文字
- ClearUndo:清除有关撤销操作的信息
- Copy:把文本框中的当前选择文字复制到剪贴板
- Cut:把文本框中的当前选择文字移动到剪贴板
- Paste:使用剪贴板中的内容替换文本框中当前选择的内容
- Select:在文本框中选择指定范围的文字
- SelectAll:选择文本框中的所有内容
- Undo:撤销文本框中的最后一次修改操作
文本框的事件
TextChanged事件:在TextChanged事件的处理方法或是OnTextChanged方法中不要试图修改本文本框的内容,否则将循环触发TextChanged事件,造成死循环。
具体操作如下:
private void textBoxSend_KeyPress(object sender, KeyPressEventArgs e) { switch (e.KeyChar) { case (char)Keys.LineFeed: //#10 case (char)Keys.Enter: //#13 if (Control.ModifierKeys == Keys.Control) { ((TextBox)sender).Clear();// 清空文本内容 e.Handled = true; // 使输入失效 } break; } }
窗体的事件:
private void MessageSend_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter && e.Control) { buttonSend.PerformClick(); textBoxSend.Text = null; textBoxSend.Select(0, 0); textBoxSend.ScrollToCaret(); } if (e.KeyCode ==Keys.Escape) { buttonClose.PerformClick(); } }