textbox.text 属性是获取用户输入内容的最直接方式,返回 string 类型,实时反映 ui 状态,空值为 "" 而非 null;需确保控件已初始化、名称正确、未禁用,且避免在未加载完成时读取。

TextBox.Text 属性就是你要的值
绝大多数情况下,TextBox.Text 就是获取用户输入内容的唯一正确方式。它返回 string 类型,不需要额外转换或事件绑定——只要控件已存在、没被禁用,随时可读。
- 别在
TextChanged事件里反复取值做判断,除非真需要实时响应;多数业务逻辑放在按钮点击(如Button.Click)里读更稳妥 -
Text值始终反映当前 UI 状态,哪怕用户刚删掉一个字、光标还在末尾,它也立刻更新 - 如果 TextBox 是空的,
Text返回空字符串"",不是null(除非你手动赋了null,但不推荐)
别踩 NullReferenceException 这个坑
常见错误:窗体还没加载完就去读 textBox1.Text,或者控件名写错导致变量为 null。
- 确保读取时机在
InitializeComponent()之后,比如放在Form.Load事件或按钮点击中 - 检查设计器生成的字段名是否和代码里一致(大小写敏感),比如
textBox1写成textbox1就会编译不过或运行时报NullReferenceException - 如果 TextBox 是动态创建的,确认
Controls.Add()已执行,且未被提前Dispose()
多行 TextBox 和 PasswordBox 的差异
普通 TextBox 和 RichTextBox、PasswordBox 不是一回事,不能混用属性。
- 多行文本(
TextBox.Multiline == true)时,Text依然有效,换行符是\r\n(Windows)或\n(跨平台注意) -
PasswordBox没有Text属性,必须用PasswordBox.SecurePassword或PasswordBox.Password(后者不安全,仅调试用) -
RichTextBox用的是RichTextBox.Text,但它的Text不包含格式信息;要取 RTF 内容得用RichTextBox.Rtf
WPF 和 WinForms 的命名空间差异容易漏
同一个名字的控件,在不同框架下属于不同命名空间,引用错会导致编译失败或 IntelliSense 不识别。
- WinForms:
System.Windows.Forms.TextBox→ 用在Form里,Text是可读写属性 - WPF:
System.Windows.Controls.TextBox→ 用在Window或UserControl里,Text也是可读写,但支持绑定(Binding) - 如果项目同时引用了两个框架,又没加 using 别名,
TextBox可能被误解析,建议显式写全名或用别名,比如using WinForms = System.Windows.Forms;
textBox1.Text 却拿到空字符串——十有八九是控件没初始化、名字拼错了,或者你在设计时改过控件名但没同步更新代码里的变量名。











