如何将数据从多个文本框保存到一个文本文件中

本文关键字:文本 文件 一个 数据 保存 | 更新日期: 2023-09-27 17:58:52

我正在用一个按钮开发一个windows窗体应用程序。每次我按下按钮,它都会生成文本框。例如,如果我点击该按钮5次,就会出现5个文本框。现在用户将在这些文本框中输入数据。当他按下回车键(另一个按钮)时,它必须存储到一个文本文件中。当我在运行时生成文本框时,我在这一点上进行了结构化。有人能帮我吗。

我的代码是

private void create_pos(对象发送方,EventArgs e){counter_1++;

        if (counter_1 == count)
        {
            left += 300;
            top = 50;
            count = count + 25;
        }
        List<Button> buttons = new List<Button>();
        Button newButton = new Button();
        buttons.Add(newButton);
        this.Controls.Add(newButton);
        newButton.Left = left;
        newButton.Top = top;

            TextBox newtextbox = new TextBox();
        Controls.Add(newtextbox);

        if (counter_1 == 100)
        {
            button1.Enabled = false;
        }
        newtextbox.Left = left + 100;
        newtextbox.Name = "text" + counter_1;
       // TextWriter tsw = new StreamWriter(@"d:'test.txt", true);
        //tsw.WriteLine(newtextbox.Text);
       // tsw.Close();
        newtextbox.Top = top;
        top += newButton.Height + 2;
        newButton.Text = "position" + counter_1;

        textBox1.Text = newtextbox.Name;
    }
    private void Save_Click(object sender, EventArgs e)
    {
        foreach (Control item in Controls)
        {
            if (item.GetType() == typeof(TextBox))
            {
                savetext[counter_1] = item.Text.ToString();
            }

            System.IO.File.WriteAllText("d:''test.txt", savetext.ToString());
        }
    }

如何将数据从多个文本框保存到一个文本文件中

我会跟踪你的动态文本框,这样你就可以区分你现在关心的文本框和表单上可能已经存在或以后可能添加的任何其他文本框。我假设,当你生成一个TextBox并将其添加到表单中时,你也会将对它的引用存储在一个列表中,例如

List<TextBox> dynamicTextBoxes = new List<TextBox>();

在Enter键的事件处理程序(或要触发写入的任何其他事件处理程序)中,可以从控件中收集文本并将其写入。这里还不清楚你的需求是什么,所以让我们写一个函数,接受一个TextBox列表和一个文件名来写文本,一次一行

private void WriteTextBoxes(string path, List<TextBox> textBoxes)
{
    // Here we use some Linq to quickly get all of the text, but you could
    // also use an explicit loop
    string text = string.Join(Environment.NewLine, textBoxes.Select(t => t.Text));
    File.WriteAllText(path, text);
}

然后,您可以从事件处理程序中调用该方法,传入动态TextBox控件的列表

WriteTextBoxes(@"C:'Temp'My.txt", dynamicTextBoxes);

您想要做的是,遍历类型为TextBox的子控件,然后收集其文本,并用这些收集的值生成一个字符串。现在您有了要写入文件的文本和文件的路径。然后可以使用File.WriteAllText方法执行操作:

StringBuilder contentBuilder = new StringBuilder();
foreach (TextBox dynamicText in this.Controls.OfType<TextBox>())
{
    contentBuilder.AppendFormat("Text in {0} is {1} 'n", dynamicText.Name, dynamicText.Text);
}
string pathOfFile = @"path here";
System.IO.File.WriteAllText(pathOfFile,contentBuilder.ToString());

使用此功能查找表单上的控件。FindControl方法,并检查它是否为文本框。如果是文本框,则使用其.text属性读取内容。使用循环遍历控件。

如果您没有维护生成控件的列表,请执行以下操作:

string filePath = "path to text file";
StringBuilder contentBuilder = new StringBuilder();
foreach (Control item in Controls)
{
     //i don't remember if this check would work. if it doesn't work try item.GetType() == typeof(TextBox)
     if (item is TextBox)
     {
          contentBuilder.Append(((TextBox)item).Text);
     }
}
string content = contentBuilder.ToString();
if(!string.IsEmptyOrWhiteSpace(content))
{
    using(StreamWriter writer = new StreamWriter(filePath))
    {
        //check if Write or WriteLine or something else would work.
        writer.Write(content);
    }
}

如果您使用list来维护生成的控件,那么只需更改循环的for部分即可。