2012-08-14 149 views
1

"view = new Person"放在按鈕事件處理程序中是否可以使用?如果我不這樣做,並將其放在Form1構造函數中,則只會添加最後一個值。如果我想聲明一個新實例並將其添加到我的Arraylist中,那麼這是否是正確的方法?在窗體中聲明C#類對象

private ArrayList store; 

    public Form1() 
    { 
     InitializeComponent(); 
     store = new ArrayList(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     //Is it okay to declare a new instance of the Person class 
     // with each button push?    
     Person view = new Person(); 
     view.firstname = txtFirstName.Text; 
     view.lastname = txtLastName.Text; 
     store.Add(view); 
     txtFirstName.Clear(); 
     txtLastName.Clear(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     foreach (Person display in store) 
     { 
      MessageBox.Show(display.ToString()); 
     } 
    } 
+1

是的,這看起來像*完全*你想做什麼。我懷疑你的按鈕標有「創建新人」或什麼的,對吧? – 2012-08-14 19:03:27

+1

'store'應該是'List '而不是'ArrayList' – Lee 2012-08-14 19:04:14

+0

是的,沒關係。因爲您要添加對ArrayList的引用,所以不會丟失該實例。 – 2012-08-14 19:04:15

回答

5

是否還好放置該按鈕事件處理程序中「視圖=新的人」?

是的。如果您的目標是每次點擊按鈕時都會創建一個新用戶,那麼這是適合的。

附註:您應該考慮使用List<Person>而不是ArrayList。這是更新的,類型安全的列表類(從.NET 2.0開始),並且更好用。

0

這看起來像剛好你應該做的。

我想你應該在某處避免做一些複雜的事情,比如在窗體的事件處理程序中實例化對象。這聽起來像一個稱爲「模型 - 視圖 - 控制器」的應用程序設計模式,爲了實現它,您將擁有一個類,與您的WinForm分離,包含單擊按鈕時應執行的邏輯,以及表單的控件被鏈接到這個Controller的方法,而不是包含它自己的處理程序的表單。它有它的優點,但對於普通的小項目來說並不是必需的。繼續做你正在做的事情,這很好。

有幾件事情:首先,除非在.NET 1.1中編碼,否則ArrayList通常不是好東西。從.NET 2.0開始,這種語言引入了一種稱爲泛型的概念,泛型允許您執行的主要任務之一是指定集合可以包含的對象的類型。 System.Collections.Generics.List<T>類是store的更好選擇,如果它將存儲的是People;將聲明更改爲private List<Person> store;。使用泛型集合的好處在於,需要返回對象的代碼將知道對象是什麼類型,因爲集合將禁止向其添加不同類型的對象。

其次,在定義事件處理程序之前,將它們放入設計器中時命名按鈕。代碼應該是自我記錄的,而名爲「button1」的按鈕並不告訴我們應該做什麼。如果在將其從「工具箱」拖動到窗體上後將其命名爲「CreatePersonButton」,那麼當您雙擊它來定義其行爲時,事件處理程序將被命名爲「CreatePersonButton_Click」,這更具描述性。