[英]How can I add “item” to arraylist, if checkbox is marked?
我對 c# 還是有點陌生,我目前正被困在一個項目中。 所以基本上我目前有一個由 5 個文本框、一個復選框和一個按鈕組成的表單。 當用戶填寫信息並在不勾選復選框的情況下提交時,信息將存儲在 arraylist 中。 如果用戶注冊為 traindriver,並標記 traindriver 復選框並提交,則需要將“id”傳遞給 arraylist,以及所有其他信息,如名字和姓氏等。
目前我有一個人 class,它工作得很好。 然后我有一個名為 traindrivers 的子類,它由一個“id”變量組成,每次注冊新的 traindrivers 時都會“遞增”,因為它們不能具有相同的編號。 那么,如果注冊的人被標記為火車司機,我該如何將此“id”添加到“personsArrayList”中?
我嘗試使用添加新人員時使用的過程。 但由於某種原因,我找不到包含 id 的變量。
public class Persons
{
//instance variables
private string firstname;
private string lastname;
private string email;
private int age;
//constructor
public Persons(string firstname, string lastname, string email, int age)
{
this.firstname = firstname;
this.lastname = lastname;
this.email = email;
this.age = age;
}
public string FirstName
{
get { return firstname; }
set { firstname = value; }
}
public string LastName
{
get { return lastname; }
set { lastname = value; }
}
public string Email
{
get { return email; }
set { email = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public override string ToString()
{
return FirstName + " " + LastName + " - " + Email + " - " + Age + ".";
}
}
public class Traindrivers : Persons
{
protected int id;
protected static int mycounter;
public Traindrivers(int id, string firstname, string lastname, string email, int age) : base(firstname, lastname, email, age)
{
mycounter++;
id = mycounter;
}
public int LicensNumber
{
get { return id; }
set { id = value; }
}
public override string ToString()
{
return LicensNumber + FirstName + LastName + Email + Age;
}
}
------------ aspx 頁面 ---------
protected void Button1_Click(object sender, EventArgs e)
{
Persons p1 = new Persons(TextBoxFirstName.Text, TextBoxLastName.Text, TextBoxEmail.Text, Convert.ToInt32(TextBoxAge.Text));
personsArrayList.Add(p1);
//Session["trainpersons"] = personsArrayList;
}
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
// When the checkbox is marked, add "id" to the arraylist
}
protected void ShowButton_Click(object sender, EventArgs e)
{
ListBox1.Items.Clear();
for (int i = 0; i < personsArrayList.Count; i++)
{
ListBox1.Items.Add(personsArrayList[i].ToString());
Console.WriteLine(i);
}
}
}
protected void trainBtn_Click(object sender, EventArgs e)
{
ListBox1.Items.Clear();
for (int i = 0; i < traindriversArrayList.Count; i++)
{
ListBox1.Items.Add(traindriversArrayList[i].ToString());
}
}
預期的結果是只要是注冊的火車司機就添加“id”。 當然也可以將go 放入personsArrayList。
我發現了這種方法:在運行時使用 addrange 但設置一個完整的項目列表
string[] days = new[] { "Sunday", "Monday", "Tuesday" };
checkedListBox1.Items.AddRange(days);
好的,基於這個新的編輯,只要做一些小的改動,一切都會好起來的。 首先你不需要任何計數器,static id 就足夠了,因為你想增加那個 id,它應該被初始化。 並且由於它將自動工作,因此無需將 id 作為參數
public class Traindrivers : Persons
{
protected int id=0;
// ^^
protected static int mycounter=0;
public Traindrivers(/*int id,*/ string firstname, string lastname, string email, int age) : base(firstname, lastname, email, age)
// ^^^^^^^^^
{
mycounter++;
id = mycounter;
}
public int LicensNumber
{
get { return id; }
set { id = value; }
}
public override string ToString()
{
return LicensNumber + FirstName + LastName + Email + Age;
}
}
當您想使用它時,在 Button1_Click 方法中,首先檢查該復選框是否已選中,然后根據該復選框進行操作,如下所示:
protected void Button1_Click(object sender, EventArgs e){
if(CheckBox1.checked==true){//information is about a traindriver
Traindrivers t1 = new Traindrivers (TextBoxFirstName.Text, TextBoxLastName.Text, TextBoxEmail.Text, Convert.ToInt32(TextBoxAge.Text));
traindriversArrayList.Add(t1);
}
else{//information in textboxes is not about traindriver
Persons p1 = new Persons(TextBoxFirstName.Text, TextBoxLastName.Text, TextBoxEmail.Text, Convert.ToInt32(TextBoxAge.Text));
personsArrayList.Add(p1);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.