You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用StreamWriter将所有TextBox内容批量写入TXT文本文件

实现方案

方案1:递归遍历窗体所有TextBox控件自动导出

该方案无需手动罗列任何控件名,会自动抓取当前窗体/指定容器内所有TextBox的内容:
首先新增递归获取TextBox的辅助方法:

// 递归获取指定容器内的所有TextBox控件
private List<TextBox> GetAllTextBoxes(Control container)
{
    List<TextBox> textBoxes = new List<TextBox>();
    foreach (Control control in container.Controls)
    {
        if (control is TextBox tb)
        {
            textBoxes.Add(tb);
        }
        // 若当前控件是Panel、GroupBox等容器,递归查找子控件
        else if (control.HasChildren)
        {
            textBoxes.AddRange(GetAllTextBoxes(control));
        }
    }
    return textBoxes;
}

再修改你原有的写入逻辑即可:

SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Title = "Save Project Files";
saveFileDialog1.DefaultExt = "txt";
saveFileDialog1.FileName = "1";
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;

string pdfPath = "";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
    // 传入this代表获取当前窗体所有TextBox,仅需要某个容器内的控件就传入对应容器的名称
    List<TextBox> allTbs = GetAllTextBoxes(this);
    using(StreamWriter writer = new StreamWriter(saveFileDialog1.FileName))
    {
        foreach (TextBox tb in allTbs)
        {
            writer.WriteLine(tb.Text);
        }
    }
    pdfPath = saveFileDialog1.FileName;
}

方案2:自定义导出顺序+过滤无需导出的控件

如果需要避免导出无关输入框、或固定导出顺序,可以给需要导出的TextBox的Tag属性设置序号,比如项目名输入框Tag设为1、客户名输入框Tag设为2,遍历的时候按Tag排序即可,修改遍历逻辑如下:

List<TextBox> allTbs = GetAllTextBoxes(this)
    // 仅保留Tag为数字的TextBox,过滤不需要导出的控件
    .Where(tb => int.TryParse(tb.Tag?.ToString(), out _))
    // 按Tag的数值排序,保证导出顺序符合需求
    .OrderBy(tb => int.Parse(tb.Tag.ToString()))
    .ToList();

方案3:极简列表预定义(适合不想修改控件属性的场景)

如果不想调整控件属性,只需提前定义一次待导出的控件列表,不需要单独给每个控件写写入逻辑:

// 仅需要在这里定义一次要导出的控件,后续新增控件只要往列表里加一行即可
List<TextBox> exportTbs = new List<TextBox>
{
    Tb_ProjectName,
    tb_ClientName,
    tb_ProjectPic,
    tb_AgencyName,
    tb_AgencyLogo,
    tb_ContractorName,
    tb_ContractorLogo
};

// 写入时直接循环即可
using(StreamWriter writer = new StreamWriter(saveFileDialog1.FileName))
{
    foreach (var tb in exportTbs)
    {
        writer.WriteLine(tb.Text);
    }
}

内容的提问来源于stack exchange,提问作者Usama Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:15:03