获取用户输入并将其保存在应用程序内存中

时间:2016-11-18 11:33:47

标签: c# .net winforms

我在这里是stackoverflow和编程初学者的新手。 对于C#中经验丰富的程序员,我可能有一个非常基本的问题。

我在Visual Studio WinForms中工作,如果你看下面的截图:

Screenshot of the app

我知道获取“名字”,“姓氏”和“生日”用户输入的代码,并将其打印在右侧的文本框中。 问题是我想添加几个人,如果我注册另一个人,它只会删除第一个人。 现在我的问题是:

  • 如何在应用程序中存储数据(不需要数据库,我只是希望它在正在运行的应用程序的内存中),因此我可以添加多个人并将每个人打印在文本框中它自己的线。 然后,当我完成注册人员时,我希望将其全部打印出来,同时按下另一页上的另一个按钮。有点像旅行时的提交表格,您会看到您在最后一页上输入的所有数据。

我认为我需要将它存储在列表或其他内容中,我已尝试过,但我无法使其工作(可能不是正确的语法)。 它可能很简单,但我被卡住了! :(

我希望我的问题很清楚。

非常感谢你们的任何帮助:)

4 个答案:

答案 0 :(得分:2)

创建一个类来映射一个人是一个很好的方法!

首先,您可以在项目中创建一个Person.cs文件,如下所示:

public class Person() {

    public string firstName {get; set;}
    public string lastName {get; set;}
    public string birthday {get; set;}

    public Person(fName, lName, bDay) {
        firstName = fName;
        lastName = lName;
        birthday = bDay;
    }

    // Addition by @MongZhu
    public override ToString() {
        return firstName + " " + lastName + " Birthday: " + birthday;
    }

}

接下来,在表单代码中,您需要创建一个这样的全局列表。将其放在代码的开头或onLoad事件中:

List<Person> myList = new List<Person>;

确保使用顶部导入的System.Collections.Generic

最后,当您点击&#39;注册&#39;您要添加的按钮到列表中。 这可以在按钮的onClick事件中完成:

myList.Add(new Person(tbfName.text, tblName.text, tbBirth.text);

现在,您将拥有一个可以节省人员的列表。但你也要打印! 在您希望打印列表的任何触发器上,可能在添加新记录后,您可以执行foreach循环以遍历列表并获取所需信息:

foreach(Person p in myList) {
    p.firstName // gets first name
    p.lastName  // gets last name
    p.birthday // gets birthday
    p.ToString() // Print all Person details -- Thanks @MongZhu
}

修改 我已经修改了Person类中访问器的语法,如@MongZhu指出的那样,并且还显示了如何覆盖类中的ToString()方法以快速打印出所有人员的详细信息。

在您的评论中,您要求更详细地说明如何将其分配给标签:

foreach代码可能会出现在您的按钮的onClick()事件中。 点击&#39;注册&#39;将创建新人并将其添加到列表中。在此代码之后,您应该插入您的foreach:

// onClick
void btnRegister_Click(object sender, EventArgs e) {
    myList.Add(new Person(tbfName.text, tblName.text, tbBirth.text); // Added person to list

    // Create a string will all the person details
    string full;
    foreach(Person p in myList) {
        full += p.ToString() + " "; // Print all Person details -- Thanks @MongZhu
    }

    // Update the label
    lbDisplay.Text = full;
}

答案 1 :(得分:1)

使用您的3个字段创建一个Person类,并在注册表中创建一个新的Person对象,其中包含您可以将其添加到应用程序中可以容纳的List的输入。 单击第二个按钮,您将遍历列表并打印已添加的所有人员。

看到这样的事情当然你必须使用你的Person类而不是Part:

// Create a list of parts.
    List<Part> parts = new List<Part>();

    // Add parts to the list.
    parts.Add(new Part() {PartName="crank arm", PartId=1234});
    parts.Add(new Part() { PartName = "chain ring", PartId = 1334 });
    parts.Add(new Part() { PartName = "regular seat", PartId = 1434 });
    parts.Add(new Part() { PartName = "banana seat", PartId = 1444 });
    parts.Add(new Part() { PartName = "cassette", PartId = 1534 });
    parts.Add(new Part() { PartName = "shift lever", PartId = 1634 });

    // Write out the parts in the list. This will call the overridden ToString method
    // in the Part class.
    Console.WriteLine();
    foreach (Part aPart in parts)
    {
        Console.WriteLine(aPart);
    }

答案 2 :(得分:0)

简单:

创建一个具有3个属性的人类,firstName,lastName,birthDay

在项目中创建此人员类的静态列表。

IList<person> myList = new List<person>():
myList.Add(person, person........);

在注册人员时在此列表中添加数据。

使用该静态列表在右侧块上显示输出,列表将一直可用,直到程序运行。您可以将该列表用于所有其他目的。

答案 3 :(得分:0)

我不确定我是否理解正确,但请查看以下代码段:

public partial class Form1 : Form
{
    List<object[]> people = new List<object[]>();
    public Form1()
    {
        InitializeComponent();
    }

    private void btnRegister_Click(object sender, EventArgs e)
    {
        var person = new object[3];
        person[0] = txtFirstName.Text;
        person[1] = txtLastName.Text;
        person[2] = txtBirthday.Text;

        people.Add(person);

        txtPeople.Text = string.Empty;

        for (var i=0;i<people.Count;i++)
        {
            txtPeople.Text += string.Format("First name:\t{0}", people[i][0].ToString()) + Environment.NewLine;
            txtPeople.Text += string.Format("Last name:\t{0}", people[i][1].ToString()) + Environment.NewLine;
            txtPeople.Text += string.Format("Birthday:\t\t{0}", people[i][2].ToString()) + Environment.NewLine + Environment.NewLine;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        txtFirstName.Text = "FirstName" + people.Count();
        txtLastName.Text = "LastName" + people.Count();
        txtBirthday.Text = "Birthday" + people.Count();
    }
}