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 开发中不可或缺的核心控件。
