簡體   English   中英

如何從通用數組列表輸出到列表框?

[英]How to Output from Generic Array List, to Listbox?

我正在嘗試從數組列表輸出到列表框。 我的問題是我想我不知道如何將Class連接到Generic數組列表嗎? 最終結果應如下所示:

在此處輸入圖片說明

然后對信息進行如下排序:所有信息都進入第一個列表框,然后上面的18位進入成人,下面的18位進入孩子。 我的課看起來像這樣:

namespace Patients
{
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public String Password { get; set; }

        public Person() //Constructor
        {
            Age = 0;
            Password = "";
        }

        public Person (string name, int age, string password) //Parameters    
        {
            this.Name = name;
            this.Age = age;
            this.Password = password;    
        }

        public override string ToString()  // 
        {    
            return Name + Age.ToString() + Password;  //outputs as a string
            // return Name + " (" + Age + " years) " + Password ;
        }               
    }
}    

namespace Patients
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        public static void Page_Load(object sender, EventArgs e)
        {

        }

        public void ButtonAdd_Click(object sender, EventArgs e)
        {
            Person p = new Person();

            List<string> People = new List<string>();
            People.Add(TextBoxName.Text);
            People.Add(TextBoxAge.Text);
            People.Add(TextBoxPassword.Text);

            foreach (object Person in People)     
            {
                ListBoxAll.Items.Add(p.Name + p.Age.ToString() + p.Password);
            }

            if (p.Age > 18)
            {
                ListBoxAdults.Items.Add(p.Name + p.Age.ToString() + p.Password);    
            }                 
            else
            {    
                ListBoxKids.Items.Add(p.Name + p.Age.ToString() + p.Password);    
            }                        
        }    
    }
}

看起來您正在混搭一些。 嘗試這樣的事情。

Person p = new Person();
p.Name = TextBoxName.Text;
p.Age= TextBoxAge.Text;
p.Password= TextBoxPassword.Text;
ListBoxAll.Items.Add(p);

我認為您的問題是,您沒有設置屬性。 實際上,您根本不需要列表,但可以使用列表來保留您的患者。 仍然沒有必要:

namespace Patients
{
public partial class WebForm1 : System.Web.UI.Page
{
    // Define Property and initialize List
    public List<Person> patients{ get; } = new List<Person>();
    public static void Page_Load(object sender, EventArgs e)
    {

    }
     public void ButtonAdd_Click(object sender, EventArgs e)
    {
        // Use the Constructor with Parameters 
        Person p = new Person(TextBoxName.Text, TextBoxAge.Text, TextBoxPassword.Text);
        // Add your patient to your List
        patients.Add(p);
        // Use the ToString() of your Person
        ListBoxAll.Items.Add(p.ToString());


        if (p.Age > 18)
        {
            ListBoxAdults.Items.Add(p.ToString());    
        }                 
        else
        {    
            ListBoxKids.Items.Add(p.ToString());    
        }                        
    }    
}

}

一些對我們有益的技巧,首先,您可以為屬性聲明默認值,例如:

    public string Name { get; set; } = "Steve";
    public int Age { get; set; } = 1;
    public String Password { get; set; } = "password";

但是,還應該注意,“”已經是字符串的默認值,而0是不可空int的默認值,因此您甚至不必擔心這些默認值。

宣布Age = 0; 在這種情況下,在構造函數中基本上是浪費時間。 (如果它是可為null int,但默認值為null

接下來,由於您可以使用默認值,因此無需像在構造函數中那樣聲明屬性。

您可以完全刪除構造函數,只需執行以下操作:

 var myPerson = new Person { Name = "Steve", Age = 18, Password = "Foo" };

接下來,一旦退出按鈕單擊范圍,您將失去所有現有人員。

取而代之的是,您將要聲明兩個不在click方法范圍內的人員列表(以這種方式持久):“成人”和“兒童”

然后也許創建一個名為“ PopulateLists”的方法,該方法將執行以下操作:

  1. 清除所有列表框
  2. 將每個適用的組名稱列表添加到每個框中(您可以使用列表上的Linq和Select語句使IQueryable成為可能)

單擊該按鈕時,您應該結識一個新人,將其分配到正確的列表,然后調用PopulateLists()

這是您需要入門的信息:

Linq選擇以獲取屬性列表(在這種情況下,我將把人列表變成年齡列表,但是您可以對名稱進行相同操作)

 var ages = People.Select(p => p.Age);

ListBox的.Items屬性與列表相同,只是在視覺上顯示自己。 這是一個專門的字符串列表。

因此,例如,您可以做...

 MyListBox.Items.Clear();
 MyListBox.Items.Add(...);
 MyListBox.Items.AddRange(...);

等等等

那應該讓您開始!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM