繁体   English   中英

C#将多个文本框保存到一个.txt文件中

[英]C# Saving multiple textbox's, into one .txt file

好的,首先,我是C#的入门者(完全是编程的入门者),并且在google上进行了完全搜索之后,我找不到关于此的解决方案。

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

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

例如:

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

当我单击“保存”按钮时,它将以以下形式将所有这些信息保存在名为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 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文件的内容,还是仅用于存储? 如果是后者,则可以考虑创建一个封装所有属性(例如Person,Employee等...)的可序列化类,然后将这些字段绑定到表单字段。 然后,您只需要将类/对象序列化为一个并将其存储到文本文件中,而不必对每个单独的字段进行sw.Writeline。

我认为最简单的方法(因为您是初学者)是创建一个字符串数组,该字符串数组可以容纳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代表true,0代表false。 这些值可以是您喜欢的任何值,只要您正确读回即可。

由于您一般都不熟悉编程,因此我将告诉您初学时应该听到的内容:完全采用OO(面向对象)方式进行。 有一天,您可能已经足够高超的能力来研究诸如函数式编程之类的东西,但是在那之前,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; }
}

可见,该类具有与person类相同的代码,但也具有Job属性。 作为清除代码的奖励,您可以将Employee传递给采用Person作为参数的方法,因为雇员“是” person。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM