跳转到主内容
极星编程网:以代码为星,赴技术山海!

WinForm组件之TextBox控件

TextBox 控件是 WinForm 中用于接收和显示文本输入的核心控件,广泛应用于表单输入、数据编辑、文本展示等场景。

它支持单行输入、多行文本、密码框等多种模式,是用户与程序交互的重要桥梁。

TextBox 控件的核心属性 TextBox 提供了丰富的属性来控制输入行为和外观,以下是最常用的属性: 属性名作用描述

Text获取或设置文本框中的内容(核心属性),例如:textBox1.Text = "Hello"。Multiline布尔值,控制是否允许多行输入(默认False)。设为True时可输入换行符。PasswordChar设置密码显示字符(如'*'或'•'),用于密码框(Multiline需为False)。ReadOnly布尔值,控制文本框是否为只读(True时不可编辑,但可选中复制)。MaxLength限制输入的最大字符数(默认 32767),设为 0 表示无限制。ScrollBars当Multiline = True时,设置滚动条类型:None、Horizontal、Vertical、Both。Font文本的字体样式(同 Label 控件,包括字体、大小、风格)。ForeColor/BackColor文本颜色和背景颜色。Enabled控制文本框是否启用(False时呈灰色,不可交互)。Visible控制文本框是否可见。Location/Size位置(X,Y 坐标)和大小(宽度、高度),同 Label 控件。TextAlign文本对齐方式(Left、Center、Right),对多行文本同样有效。AcceptsReturn当Multiline = True时,控制是否允许按 Enter 键换行(默认True)。AcceptsTab当Multiline = True时,控制是否允许按 Tab 键输入制表符(默认False)。SelectedText获取或设置当前选中的文本(可用于复制、替换选中文本)。SelectionLength选中的文本长度。SelectionStart选中文本的起始位置(从 0 开始)。

TextBox 控件的常用事件 TextBox 的事件主要用于响应输入变化和交互操作,常用事件如下: 事件名触发时机

TextChanged文本内容发生改变时触发(如输入、删除、粘贴等),常用于实时验证或联动更新。KeyPress按下并释放键盘按键时触发,可用于拦截特定字符(如限制只能输入数字)。KeyDown/KeyUp按键按下 / 松开时触发,可响应功能键(如 Enter、Tab、方向键)。GotFocus文本框获得焦点时触发(如用户点击或通过 Tab 键切换至此)。LostFocus文本框失去焦点时触发(如用户点击其他控件),常用于验证输入内容。MouseClick鼠标点击文本框时触发。

TextBox 控件的典型用法 TextBox 适用于多种场景,根据属性配置可实现不同功能: 单行输入框 默认模式(

Multiline = False

),用于接收短文本(如用户名、手机号、搜索关键词)。

密码输入框 设置

PasswordChar = '*'

或

UseSystemPasswordChar = True

,输入内容以掩码显示。

多行文本框 设置

Multiline = True

,可输入大段文本(如备注、描述),配合

ScrollBars

实现滚动。

只读文本展示 设置

ReadOnly = True

,用于显示不可编辑的文本(如日志、详情信息)。

带输入限制的文本框 通过

MaxLength

限制长度,或通过

KeyPress

事件过滤非法字符(如仅允许数字)。

使用示例:多样化的 TextBox 效果 默认单行输入

选择多行之后可以调整大小

可以设置只读,无法输入内容

以下代码演示了不同功能的 TextBox 控件,覆盖单行输入、密码框、多行文本、带限制的输入等场景:

using System; using System.Drawing; using System.Windows.Forms; ​ namespace TextBoxDemo { public class TextBoxExampleForm : Form { public TextBoxExampleForm() { // 窗体基础设置 Text = "TextBox 控件示例"; Size = new Size(500, 450); StartPosition = FormStartPosition.CenterScreen; Controls.AddRange(CreateControls()); // 添加所有控件到窗体 } ​ // 创建所有控件(包括Label和TextBox) private Control[] CreateControls() { // 1. 单行文本框(用户名输入) Label userNameLabel = new Label { Text = "用户名:", Location = new Point(30, 30), AutoSize = true }; TextBox userNameTextBox = new TextBox { Location = new Point(100, 30), Size = new Size(200, 20), MaxLength = 20, // 限制最大20个字符 Hint = "请输入用户名" // 提示文本(.NET 5+ 支持) }; ​ // 2. 密码框 Label passwordLabel = new Label { Text = "密码:", Location = new Point(30, 70), AutoSize = true }; TextBox passwordTextBox = new TextBox { Location = new Point(100, 70), Size = new Size(200, 20), PasswordChar = '*', // 密码显示为* MaxLength = 16 // 密码最长16位 }; ​ // 3. 多行文本框(备注输入) Label noteLabel = new Label { Text = "备注:", Location = new Point(30, 110), AutoSize = true }; TextBox noteTextBox = new TextBox { Location = new Point(100, 110), Size = new Size(300, 100), Multiline = true, // 允许多行 ScrollBars = ScrollBars.Vertical, // 垂直滚动条 AcceptsReturn = true, // 允许Enter换行 WordWrap = true // 自动换行 }; ​ // 4. 只读文本框(信息展示) Label infoLabel = new Label { Text = "系统信息:", Location = new Point(30, 230), AutoSize = true }; TextBox infoTextBox = new TextBox { Location = new Point(100, 230), Size = new Size(300, 60), Multiline = true, ReadOnly = true, // 只读 BackColor = SystemColors.Control, // 背景色与窗体一致 Text = "这是只读文本框,用于展示不可编辑的信息。

\n例如系统状态、操作日志等。

" }; ​ // 5. 仅允许数字输入的文本框(年龄) Label ageLabel = new Label { Text = "年龄:", Location = new Point(30, 310), AutoSize = true }; TextBox ageTextBox = new TextBox { Location = new Point(100, 310), Size = new Size(100, 20), MaxLength = 3 // 最多3位数字 }; // 绑定KeyPress事件,限制只能输入数字 ageTextBox.KeyPress += (sender, e) => { // 允许退格键(Backspace),其他非数字字符不处理 if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back) { e.Handled = true; // 取消事件,不显示输入 } }; ​ // 6. 实时显示输入长度的文本框 Label lengthLabel = new Label { Text = "简介(限50字):", Location = new Point(30, 350), AutoSize = true }; TextBox introTextBox = new TextBox { Location = new Point(130, 350), Size = new Size(250, 20), MaxLength = 50 }; Label lengthHintLabel = new Label { Text = "0/50", Location = new Point(390, 350), AutoSize = true }; // 实时更新长度提示 introTextBox.TextChanged += (sender, e) => { lengthHintLabel.Text = $"{introTextBox.Text.Length}/50"; // 当接近最大长度时变色提醒 lengthHintLabel.ForeColor = introTextBox.Text.Length > 40 ? Color.Red : Color.Black; }; ​ // 返回所有控件 return new Control[] { userNameLabel, userNameTextBox, passwordLabel, passwordTextBox, noteLabel, noteTextBox, infoLabel, infoTextBox, ageLabel, ageTextBox, lengthLabel, introTextBox, lengthHintLabel }; } ​ // 程序入口 [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new TextBoxExampleForm()); } } } ​ 代码说明 这个示例创建了多种功能的 TextBox 控件,包括: 用户名输入框 :限制最大长度为 20,并添加提示文本(.NET 5+ 支持

Hint

属性)。

密码框 :通过

PasswordChar = '*'

将输入显示为星号,增强安全性。

多行备注框 :启用多行模式和垂直滚动条,支持 Enter 换行和自动换行。

只读信息框 :设置

ReadOnly = true

并调整背景色,用于展示不可编辑的内容。

数字输入框 :通过

KeyPress

事件过滤非数字字符(仅允许数字和退格键)。

长度限制提示框 :实时显示输入长度,并在接近上限时变色提醒。

使用注意事项 密码安全 :使用

PasswordChar

时,

Multiline

必须设为

False

,否则密码掩码无效。

输入验证 :复杂验证(如邮箱格式、手机号规则)建议在

LostFocus

事件中执行,避免频繁触发。

性能考量 :对于超大量文本(如几 MB 内容),建议使用

RichTextBox

替代,TextBox 可能出现卡顿。

线程安全 :在非 UI 线程中更新

Text

属性时,需使用

Invoke

方法(如

textBox1.Invoke(() => { textBox1.Text = "更新内容"; })

)。

Tab 键导航 :通过

TabIndex

属性设置控件的 Tab 顺序,方便用户通过键盘导航。

TextBox 控件通过灵活的属性配置和事件处理,能够满足从简单输入到复杂文本编辑的各种需求,是 WinForm 开发中不可或缺的核心控件。

相关文章