如何在C# Winform的字符串之间插入TextBox控件?
实现方案
C# Winforms 完全支持动态创建 TextBox 控件并插入到文本的对应位置,主流实现方案有两种:
方案1:使用 FlowLayoutPanel 承载内容(推荐,适配性最高)
核心逻辑是把原始字符串按插入输入框的位置拆分为多个文本片段,交替插入文本Label和输入框到FlowLayoutPanel中,自动完成排版:
- 拆分原始字符串为多个文本段,比如要实现效果
姓名[输入框] 年龄[输入框] 性别[输入框],就拆为["姓名:", " 年龄:", " 性别:"] - 遍历文本段,每输出一段文本就创建一个
Label控件,设置AutoSize = true后添加到FlowLayoutPanel,紧随其后创建对应TextBox控件,设置合适宽度后也添加到容器即可
示例代码:
// 初始化承载容器 FlowLayoutPanel contentPanel = new FlowLayoutPanel { Dock = DockStyle.Fill, AutoScroll = true, Padding = new Padding(15) }; this.Controls.Add(contentPanel); // 拆分后的文本片段 List<string> textFragments = new List<string> { "请输入姓名:", " 请输入年龄:", " 请输入联系地址:", " 提交信息" }; for (int i = 0; i < textFragments.Count; i++) { // 添加文本标签 contentPanel.Controls.Add(new Label { Text = textFragments[i], AutoSize = true, Margin = new Padding(0, 7, 0, 0) // 垂直对齐调整 }); // 最后一段文本后无需添加输入框,做判断跳过 if (i != textFragments.Count - 1) { contentPanel.Controls.Add(new TextBox { Width = 150, Margin = new Padding(3, 0, 3, 0) }); } }
后续需要取输入值时,遍历contentPanel.Controls筛选出TextBox类型控件即可获取对应输入内容。
方案2:RichTextBox 嵌入控件(适合富文本混排场景)
如果需要和复杂富文本内容结合,可以用RichTextBox作为载体:
- 先向RichTextBox写入基础文本,定位到需要插入输入框的字符索引位置
- 调用
RichTextBox.GetPositionFromCharIndex()方法获取该位置的坐标 - 动态创建TextBox,设置Parent为RichTextBox,将Location设置为获取到的坐标即可。
注意事项
动态创建的控件建议提前设置Name或Tag属性标记用途,方便后续取值时快速匹配对应输入框。
内容的提问来源于stack exchange,提问作者Devendra Yadav
相关产品推荐
相关产品推荐

