C#保存多个文本框';s、 转换为一个.txt文件

C#保存多个文本框';s、 转换为一个.txt文件,c#,text,textbox,save,C#,Text,Textbox,Save,好的,首先,我是C#的初学者(编程方面的初学者),在谷歌上搜索了一段时间后,我找不到解决这个问题的方法 所以,我需要做的是: 我有14个文本框和几个复选框: 一个人的姓名、出生日期、出生地和其他一些信息,例如。。。我有一个保存按钮,可以将所有信息保存在一个.txt或.rtf文件中。每次我在textBox中输入这些信息时,它都会将其保存为以textBoxName中输入的文本命名的文件 例如: textBoxName: Petar Milutinovic; textBoxBirth: 01.11.1

好的,首先,我是C#的初学者(编程方面的初学者),在谷歌上搜索了一段时间后,我找不到解决这个问题的方法

所以,我需要做的是: 我有14个文本框和几个复选框:

一个人的姓名、出生日期、出生地和其他一些信息,例如。。。我有一个保存按钮,可以将所有信息保存在一个.txt或.rtf文件中。每次我在textBox中输入这些信息时,它都会将其保存为以textBoxName中输入的文本命名的文件

例如:

textBoxName: Petar Milutinovic;
textBoxBirth: 01.11.1991;
textBoxCity: Paracin;
当我点击Save按钮时,它会将所有这些信息保存在一个名为Petar Milutinovic(与textBoxName同名)的文件中,格式如下:

Name: Petar Milutinovic;
Date of Birth: 01.11.1991;
City: Paracin;
哦,孩子。。。我真的很抱歉英语拼写,这不是我的主要(你注意到了…)。这几天这个问题让人很痛苦

您可以(应该)首先为每个字段创建属性,如下所示:

private string Name
{
    // now you avoid a bunch of references to txtName.Text potentially 
    // throughout your form code.  This makes things more simple if you
    // want to swap out UI elements later on.
    get { return txtName.Text; } 
}

private DateTime DateOfBirth
{
    get { return /*selected date*/; } } 
}

// more properties for each field
private void buttonSave_Click(object sender, EventArgs e)
{
    Person p = new Person(textBoxName.Text,
                          textBoxAge.Text,
                          textBoxCity.Text);
    p.SerializeToFile();
}
现在,您只需打开一个文件并开始写入:

private void WriteDataFile( filepath )
{
    // Note: You should handle potential IO errors in a try/catch block
    using( FileStream fs = File.Open( filepath, FileMode.Create )
    using( StreamWriter sw = new StreamWriter( fs ) )
    {
        sw.WriteLine( String.Format( "Name: {0}", this.Name ) );
        sw.WriteLine( String.Format( "Date of Birth: {0}", this.DateOfBirth ) );
        // etc.
    } 
}
您可以(应该)首先为每个字段创建属性,如下所示:

private string Name
{
    // now you avoid a bunch of references to txtName.Text potentially 
    // throughout your form code.  This makes things more simple if you
    // want to swap out UI elements later on.
    get { return txtName.Text; } 
}

private DateTime DateOfBirth
{
    get { return /*selected date*/; } } 
}

// more properties for each field
private void buttonSave_Click(object sender, EventArgs e)
{
    Person p = new Person(textBoxName.Text,
                          textBoxAge.Text,
                          textBoxCity.Text);
    p.SerializeToFile();
}
现在,您只需打开一个文件并开始写入:

private void WriteDataFile( filepath )
{
    // Note: You should handle potential IO errors in a try/catch block
    using( FileStream fs = File.Open( filepath, FileMode.Create )
    using( StreamWriter sw = new StreamWriter( fs ) )
    {
        sw.WriteLine( String.Format( "Name: {0}", this.Name ) );
        sw.WriteLine( String.Format( "Date of Birth: {0}", this.DateOfBirth ) );
        // etc.
    } 
}

您是否需要能够读取txt文件的内容,还是只是为了存储?如果是后者,您可以考虑创建一个可序列化类,该类封装所有属性(例如,人、雇员等),然后将这些字段绑定到表单字段。然后,您只需将类/对象序列化并存储到文本文件中,而无需对每个字段进行sw.Writeline操作。

您需要能够读取txt文件的内容还是仅用于存储?如果是后者,您可以考虑创建一个可序列化类,该类封装所有属性(例如,人、雇员等),然后将这些字段绑定到表单字段。然后,您只需要将类/对象序列化并存储到文本文件中,而不必对每个字段进行sw.Writeline操作。

由于您对编程基本上是新手,我将告诉您我在初学者时应该听到的内容:以面向对象的方式进行编程。有朝一日,你可能会有足够的能力去研究函数式编程,但在那之前,OO是一种可以遵循的方法,它会有很大的帮助

这是什么东西?嗯,一切都是一个物体。

这意味着您正在创建一个
Person
对象。你是怎么做到的?定义

下面是它的工作原理:

class Person
{
    public Person(string name,
                  string age,
                  string city)
    {
        this.Name = name;
        this.Age = age;
        this.City = city;
    }

    public string Name { get; private set; }
    public string Age { get; private set; }
    public string City { get; private set; }

    public void SerializeToFile()
    {
        //Do the serialization (saving the person to a file) here.
    }
}
然后(例如在“保存”按钮中),根据文本字段中的值创建一个
Person
,并按如下方式保存:

private string Name
{
    // now you avoid a bunch of references to txtName.Text potentially 
    // throughout your form code.  This makes things more simple if you
    // want to swap out UI elements later on.
    get { return txtName.Text; } 
}

private DateTime DateOfBirth
{
    get { return /*selected date*/; } } 
}

// more properties for each field
private void buttonSave_Click(object sender, EventArgs e)
{
    Person p = new Person(textBoxName.Text,
                          textBoxAge.Text,
                          textBoxCity.Text);
    p.SerializeToFile();
}
这一切可能看起来很奇怪,但现在您可以以更简洁的方式做很多事情,比如将此人保存到数据库中,或者将其作为参数传递,而不需要混乱、支离破碎和难以维护的代码

作为旁注,这也允许继承:

class Employee : Person
{
    public string Job { get; private set; }
}

请参见,该类具有与person类相同的代码,但也具有
Job
属性。作为干净代码的一个额外功能,您可以将
员工
传递给一个以
为参数的方法,因为员工“就是”人。

由于您一般都是编程新手,我将告诉您我在初学者时应该听到的内容:采用面向对象的方式。有朝一日,你可能会有足够的能力去研究函数式编程,但在那之前,OO是一种可以遵循的方法,它会有很大的帮助

这是什么东西?嗯,一切都是一个物体。

这意味着您正在创建一个
Person
对象。你是怎么做到的?定义

下面是它的工作原理:

class Person
{
    public Person(string name,
                  string age,
                  string city)
    {
        this.Name = name;
        this.Age = age;
        this.City = city;
    }

    public string Name { get; private set; }
    public string Age { get; private set; }
    public string City { get; private set; }

    public void SerializeToFile()
    {
        //Do the serialization (saving the person to a file) here.
    }
}
然后(例如在“保存”按钮中),根据文本字段中的值创建一个
Person
,并按如下方式保存:

private string Name
{
    // now you avoid a bunch of references to txtName.Text potentially 
    // throughout your form code.  This makes things more simple if you
    // want to swap out UI elements later on.
    get { return txtName.Text; } 
}

private DateTime DateOfBirth
{
    get { return /*selected date*/; } } 
}

// more properties for each field
private void buttonSave_Click(object sender, EventArgs e)
{
    Person p = new Person(textBoxName.Text,
                          textBoxAge.Text,
                          textBoxCity.Text);
    p.SerializeToFile();
}
这一切可能看起来很奇怪,但现在您可以以更简洁的方式做很多事情,比如将此人保存到数据库中,或者将其作为参数传递,而不需要混乱、支离破碎和难以维护的代码

作为旁注,这也允许继承:

class Employee : Person
{
    public string Job { get; private set; }
}
请参见,该类具有与person类相同的代码,但也具有
Job
属性。作为干净代码的一个额外功能,您可以将
员工
传递给以
个人
为参数的方法,因为员工“就是”个人。

我认为最简单的方法(因为您是初学者)是创建一个字符串数组,该数组可以容纳14个元素,因为您有14个文本框

string[] contents = new string[14];
contents[0] = "Name: " + textBoxName.Text;
contents[1] = "City: " + textBoxCity.Text;
contents[2] = "Date of Birth: " + textBoxBirth.Text;
...
然后,您可以将其直接保存到以下文件:

System.IO.File.WriteAllLines(textBoxName.Text + ".txt", contents);
当然还有其他更有效的方法,但我认为这种方法是最容易理解的

(我忘记了您的复选框,但您可以使用此概念实现相同的目标)

编辑:

对于复选框或单选按钮,可以使用Checked(或CheckState)属性

你可以这样做:

contents[0] = checkBox.Checked ? "1" : "0";
contents[1] = radioButton.Checked ? "1" : "0";
其中1表示真,0表示假。这些值可以是您喜欢的任何值,只要您正确读回。

我认为最简单的方法(因为您是初学者)是创建一个字符串数组,它可以容纳14个元素,因为您有14个文本框

string[] contents = new string[14];
contents[0] = "Name: " + textBoxName.Text;
contents[1] = "City: " + textBoxCity.Text;
contents[2] = "Date of Birth: " + textBoxBirth.Text;
...
然后,您可以将其直接保存到以下文件:

System.IO.File.WriteAllLines(textBoxName.Text + ".txt", contents);
当然还有其他更有效的方法,但我认为这种方法是最容易理解的

(我忘记了您的复选框,但您可以使用此概念实现相同的目标)

编辑:

对于复选框或单选按钮,可以使用Checked(或CheckState)属性

你可以这样做:

contents[0] = checkBox.Checked ? "1" : "0";
contents[1] = radioButton.Checked ? "1" : "0";

其中1表示真,0表示假。这些值可以是您喜欢的任何值,只要您正确地读回即可。

您的解决方案可以完美地工作,但您不妨将其简化一点,因为他说他是编程新手;)是的,我正在分析这段代码,我对每段代码的属性都有点困惑。。。我想一部分一部分地学习,这就是为什么我加入了这个。。。他们教了我们很多东西