C# 如何将多个文本框中的数据保存到文本文件中

C# 如何将多个文本框中的数据保存到文本文件中,c#,C#,我正在用一个按钮开发awindows表单应用程序。每次我按下按钮,它都会生成文本框。例如,如果我单击该按钮5次,将出现5个文本框。现在,用户将在这些文本框中输入数据。当他按下enter(另一个按钮)时,它必须存储到文本文件中。在运行时生成文本框时,我将在此时构造。 有人能帮我吗 我的代码是 私有void创建位置(对象发送方,事件参数e) { 计数器_1++ if (counter_1 == count) { left += 300;

我正在用一个按钮开发awindows表单应用程序。每次我按下按钮,它都会生成文本框。例如,如果我单击该按钮5次,将出现5个文本框。现在,用户将在这些文本框中输入数据。当他按下enter(另一个按钮)时,它必须存储到文本文件中。在运行时生成文本框时,我将在此时构造。 有人能帮我吗

我的代码是

私有void创建位置(对象发送方,事件参数e) { 计数器_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());
        }
    }
if(计数器1==计数)
{
左+=300;
top=50;
计数=计数+25;
}
列表按钮=新建列表();
按钮newButton=新按钮();
按钮。添加(新按钮);
this.Controls.Add(newButton);
纽扣。左=左;
newButton.Top=Top;
TextBox newtextbox=新的TextBox();
控件。添加(newtextbox);
如果(计数器_1==100)
{
按钮1.启用=错误;
}
newtextbox.Left=左+100;
newtextbox.Name=“text”+计数器1;
//TextWriter tsw=新的StreamWriter(@“d:\test.txt”,true);
//tsw.WriteLine(newtextbox.Text);
//tsw.Close();
newtextbox.Top=Top;
顶部+=新按钮。高度+2;
newButton.Text=“位置”+计数器1;
textBox1.Text=newtextbox.Name;
}
私有void保存\单击(对象发送者,事件参数e)
{
foreach(控件中的控件项)
{
if(item.GetType()==typeof(TextBox))
{
savetext[counter_1]=item.Text.ToString();
}
System.IO.File.writealText(“d:\\test.txt”,savetext.ToString());
}
}

使用this.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);
    }
}

如果您使用列表来维护生成的控件,则只需更改循环的for部分。

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

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());
StringBuilder contentBuilder=new StringBuilder();
foreach(this.Controls.OfType()中的TextBox dynamicText)
{
AppendFormat(“在{0}中的文本是{1}\n”,dynamicText.Name,dynamicText.Text);
}
字符串pathOfFile=@“路径在此”;
System.IO.File.writealText(pathOfFile,contentBuilder.ToString());

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

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

有人会帮助你,如果你把你尝试过的代码包括进来,你会发现你在保存数据或从生成的文本框中读取数据时的问题?保存数据时的问题。将savetext.ToString()替换为string.Join(分隔符string,savetext);分隔符字符串可以是任何字符串,甚至可以是空字符串,如string.empty;'字符串filePath=“d:\\test.txt”;StringBuilder contentBuilder=新的StringBuilder();foreach(控件中的控件项){if(item.GetType()==typeof(TextBox)){contentBuilder.Append((TextBox)item.Text);}}}string content=contentBuilder.ToString();如果(!(string.IsNullOrWhiteSpace(content)){using(StreamWriter writer=newstreamwriter(filePath)){writer.Write(content);}不需要查找控件。只需迭代表单上的控件集合。跟踪动态控件(例如列表)将更加优雅和高效。特别是,这使您能够区分表单上已经存在(或以后可能添加)的文本控件和动态控件。此外,“进行处理”是问题的核心部分。@Eric:同意“进行处理”是问题的核心部分,但他没有发布任何关于他打算如何保存数据的信息。我假设他无法在表单上找到控件。我将更新我的答案,我同意他应该维护一个控件列表。您是否收到任何错误/异常或内容未保存在文件中?罪魁祸首是savetext.ToString()。它将为您提供System.String[]。对字符串数组中的所有字符串进行联接。这将假定表单上没有非动态文本框控件(现在或将来)。这可能是一个有效的假设,也可能不是一个有效的假设,但这是一个脆弱的假设(在将来的代码维护中很容易中断)。
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);
}
WriteTextBoxes(@"C:\Temp\My.txt", dynamicTextBoxes);