1

可以放置"view = new Person"在按钮事件处理程序中吗?如果我不这样做,并且我将它放在 Form1 构造函数中,那么只会添加我的最后一个值。如果我想声明一个新实例然后将它添加到我的 Arraylist,这是正确的方法吗?

    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());
        }
    }
4

2 回答 2

5

可以在按钮事件处理程序中放置“view = new Person”吗?

是的。如果您的目标是每次单击按钮时都创建一个新人,那么这样做是合适的。

附带说明:您应该考虑使用List<Person>而不是ArrayList. 这是较新的类型安全列表类(从 .NET 2.0 开始),使用起来更方便。

于 2012-08-14T19:03:42.377 回答
0

这看起来正是你应该做的。

我想你在某处读到你应该避免做复杂的事情,比如在表单的事件处理程序中实例化对象。这听起来像是一种称为“模型-视图-控制器”的应用程序设计模式,要实现它,您将拥有一个与此处的 WinForm 分开的类,其中包含单击按钮时应执行的逻辑,以及窗体的相反,控件链接到此 Controller 的方法,而不是包含其自己的处理程序的表单。它有它的优点,但对于一般的小型项目来说,它是没有必要的。继续做你正在做的事情,一切都很好。

有几件事:首先,除非您使用 .NET 1.1 进行编码,否则 ArrayList 通常不是一件好事。从 .NET 2.0 开始,语言中引入了一个称为泛型的概念,泛型允许您做的主要事情之一是指定集合可以包含的对象的类型。该类System.Collections.Generics.List<T>是一个更好的选择,store因为它只存储人;将声明更改为private List<Person> store;. 使用泛型集合的优点是需要取出对象的代码将知道对象是什么类型,因为该集合将禁止向其添加不同类型的对象。

其次,在定义事件处理程序之前,在将按钮放入设计器时为其命名。代码应该是自记录的,一个名为“button1”的按钮并没有告诉我们它应该做什么。如果您在将该按钮从工具箱拖到窗体上之后将其命名为“CreatePersonButton”,那么当您双击它以定义其行为时,事件处理程序将被命名为“CreatePersonButton_Click”,这更具描述性。

于 2012-08-14T19:12:07.210 回答