我在这里是stackoverflow和编程初学者的新手。 对于C#中经验丰富的程序员,我可能有一个非常基本的问题。
我在Visual Studio WinForms中工作,如果你看下面的截图:
我知道获取“名字”,“姓氏”和“生日”用户输入的代码,并将其打印在右侧的文本框中。 问题是我想添加几个人,如果我注册另一个人,它只会删除第一个人。 现在我的问题是:
我认为我需要将它存储在列表或其他内容中,我已尝试过,但我无法使其工作(可能不是正确的语法)。 它可能很简单,但我被卡住了! :(
我希望我的问题很清楚。
非常感谢你们的任何帮助:)
答案 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();
}
}