我是一名正在学习编程的土木工程师(所以请不要评判)。我正在使用流写入器将文本框数据写入文本文件,但我有数百个文本框。一个接一个地写文本框名称让我抓狂,数据库也不是一个选择。我在网上搜索了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;
}
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);
}
}
1:创建一个面板,并把所有的文本框。
2:使用foreach循环从该面板中获取所有文本框:
string allTextBoxContent = string.Empty;
foreach (var control in panel1.Controls)
{
if (control is TextBox textbox)
{
allTextBoxContent += textbox.Text;
}
}