如何使用 streamwriter 将所有文本框内容写入文本文件?

How to write all textboxes content to text file using streamwritter?

我是一名正在学习编码的土木工程师(所以请不要评判)。我正在使用 streamwriter 将文本框数据写入 txt 文件,但我有数百个文本框。一个一个地写文本框的名字让我发疯,数据库不是一种选择。我现在在互联网上搜索了 3 个多小时,但找不到合适的解决方案。 以下代码工作正常,但必须有一种方法可以避免写入所有文本框名称。我真的很感激这里有任何关于如何在文本文件中写入所有文本框内容的指南?

        SaveFileDialog saveFileDialog1 = new SaveFileDialog();

        //saveFileDialog1.InitialDirectory = @"C:\";

        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)
        {
            using(StreamWriter writer = new StreamWriter(saveFileDialog1.FileName))
            {
                writer.WriteLine(Tb_ProjectName.Text);
                writer.WriteLine(tb_ClientName.Text);
                writer.WriteLine(tb_ProjectPic.Text);
                writer.WriteLine(tb_AgencyName.Text);
                writer.WriteLine(tb_AgencyLogo.Text);
                writer.WriteLine(tb_ContractorName.Text);
                writer.WriteLine(tb_ContractorLogo.Text);
            }

            pdfPath = saveFileDialog1.FileName;
            
            

        }

1:创建一个面板并将所有文本框放入其中。

2:使用 foreach 循环从该面板获取所有文本框:

string allTextBoxContent = string.Empty;
foreach (var control in panel1.Controls)
{
    if (control is TextBox textbox)
    {
         allTextBoxContent += textbox.Text;
    }
}

David 已经在他的评论中给出了正确 的答案。所以这里写了一个额外的提示:

在您的代码中,您可以遍历所有可用的文本框并将其内容写入文件。您必须考虑两件事。首先,所有文本框的书写顺序。其次,是否有任何不应写入文件的文本框。

对于这两种情况,您都应该使用可视化编辑器来设置所有文本框 TabIndex 属性 来设置内容的书写顺序,您可以使用 属性 Tag 包含一些东西来标记文本框不被写入文件。

代码草图看起来像这样:

using(StreamWriter writer = new StreamWriter(saveFileDialog1.FileName))
{
    var textBoxesToWrite = this.Controls
        .OfType<TextBox>()
        .Where(textBox => textBox.Tag != null)
        .OrderBy(textBox => textBox.TabIndex)

    foreach (var textBox in textBoxesToWrite)
    {
        writer.WriteLine(textBox.Text);
    }
}