2010-12-04 87 views
0

好的,首先,我是C#中的一个开始者(开始编程的时候),并且经过对google的一次搜索之后,我找不到这个解决方案。C#将多个文本框保存为一个.txt文件

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

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

例如:

textBoxName: Petar Milutinovic; 
textBoxBirth: 01.11.1991; 
textBoxCity: Paracin; 

当我上保存按钮点击,它会保存在以这种形式被称为佩塔尔·米卢蒂诺维奇(名称相同textBoxName)文件中的所有这些信息:

Name: Petar Milutinovic; 
Date of Birth: 01.11.1991; 
City: Paracin; 

哦,男孩...我真的很抱歉英文拼写,它不是我的主要(你注意到一个...)。这个问题已经相当痛苦这几天...

回答

1

我认为最简单的方法(因为你是一个初学者)将创建一个字符串数组,可以容纳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); 

当然还有其他更有效的方法来做到这一点,但我认为这种方式是最可以理解的。

(我忘了你的复选框,但你可以做到这个概念同一个目标)

编辑:

对于复选框,或者您可以使用经过(或CheckState)财产单选按钮。

你可以这样做:

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

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

1

你可以(应该)为每个领域的第一次创建属性,像这样:

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 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. 
    } 
} 
+0

你的解决方案可以很好地工作,但你可能会简化一点,因为他说他是编程新手;) – Machinarius 2010-12-04 23:56:25

+0

是的,即时分析这个代码,我有点困惑在每个属性...我想学习一部分一部分,这就是为什么我加入了这...在教师他们教我们很多理论(我知道它,但不能实践),我学到的东西是从谷歌和一些内容... – Estomaniko 2010-12-05 00:09:05

1

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

+0

嗯,是的,我忘了说,我需要能够稍后阅读该文件(也许打印每个文件)... – Estomaniko 2010-12-05 00:06:51

0

既然你是一般的编程新手,我会告诉你什么我应该听到当我是一个初学者:做所有面向对象(面向对象)的方式。有一天,你可能会看到像函数式编程这样的先进技术,但在那之前,面向对象是遵循的方式,它有很大的帮助。

那么这个OO是什么东西?那么,一切都是一个对象。

这意味着您正在创建一个Person对象。你如何做到这一点?定义一个Class

下面是它如何工作的:

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 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; } 
} 

看,那类有个人类相同的代码,也Job属性。作为干净代码的奖励,您可以将Employee传递给以Person作为参数的方法,因为员工“是”人。

+0

是啊! Tnx很多,这是我一直在寻找的!它很容易理解......国际海事组织,所有学校都应该尽量简化学生的计划......他们所做的一切就是教导我们理论,一个初学者不能理解。所以这是一个很大的帮助,我现在明白这是如何工作:) – Estomaniko 2010-12-05 00:26:38

相关问题