C#保存多个文本框';s、 转换为一个.txt文件
好的,首先,我是C#的初学者(编程方面的初学者),在谷歌上搜索了一段时间后,我找不到解决这个问题的方法 所以,我需要做的是: 我有14个文本框和几个复选框: 一个人的姓名、出生日期、出生地和其他一些信息,例如。。。我有一个保存按钮,可以将所有信息保存在一个.txt或.rtf文件中。每次我在textBox中输入这些信息时,它都会将其保存为以textBoxName中输入的文本命名的文件 例如:C#保存多个文本框';s、 转换为一个.txt文件,c#,text,textbox,save,C#,Text,Textbox,Save,好的,首先,我是C#的初学者(编程方面的初学者),在谷歌上搜索了一段时间后,我找不到解决这个问题的方法 所以,我需要做的是: 我有14个文本框和几个复选框: 一个人的姓名、出生日期、出生地和其他一些信息,例如。。。我有一个保存按钮,可以将所有信息保存在一个.txt或.rtf文件中。每次我在textBox中输入这些信息时,它都会将其保存为以textBoxName中输入的文本命名的文件 例如: textBoxName: Petar Milutinovic; textBoxBirth: 01.11.1
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表示假。这些值可以是您喜欢的任何值,只要您正确地读回即可。您的解决方案可以完美地工作,但您不妨将其简化一点,因为他说他是编程新手;)是的,我正在分析这段代码,我对每段代码的属性都有点困惑。。。我想一部分一部分地学习,这就是为什么我加入了这个。。。他们教了我们很多东西