2012-08-14 3 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

네, 여기가 * 정확히 * 원하는대로입니다. 나는 당신의 버튼이 "새로운 사람 만들기"또는 무엇인가 맞다고 의심해, 그렇지? –

+1

'store'는'ArrayList' 대신'List '이어야합니다 – Lee

+0

예, 괜찮습니다. ArrayList에 대한 참조를 추가하기 때문에 인스턴스를 잃어 버리지는 않습니다. –

답변

5

는 버튼 이벤트 핸들러 내에서 "보기 = 새로운 사람을"배치 괜찮습니까?

예. 버튼을 클릭 할 때마다 새로운 사람을 만드는 것이 목표라면, 이렇게하는 것이 적절합니다.

참고 : ArrayList 대신 을 사용해야합니다. 이것은보다 안전한 최신 형식 안전 목록 클래스입니다 (.NET 2.0 기준). 사용하기 훨씬 좋습니다.

0

정확히로 표시됩니다.

폼의 이벤트 처리기에서 개체를 인스턴스화하는 것과 같은 복잡한 작업을 수행하지 않도록해야한다고 읽는다고 가정합니다. 이것은 "Model-view-controller"라고 불리는 애플리케이션 디자인 패턴처럼 들리며 구현하려면 버튼을 클릭 할 때 수행해야하는 로직을 포함하는 WinForm과는 별도의 클래스가 있어야하며 Form의 컨트롤은 자체 핸들러가 포함 된 폼 대신이 컨트롤러의 메서드에 대신 연결됩니다. 장점이 있지만 평균적인 소규모 프로젝트에서는 필요하지 않습니다. 당신이하고있는 일을 계속하십시오, 그것은 아주 좋습니다.

몇 가지 : 먼저 .NET 1.1에서 코딩하지 않는 한 ArrayList는 일반적으로 좋지 않습니다. .NET 2.0부터 generics라고하는 개념이 언어에 도입되었으며, 제네릭에서 할 수있는 기본 기능 중 하나는 컬렉션에 포함 할 수있는 객체 유형을 지정하는 것입니다. 모든 것이 저장되는 경우 store의 경우 System.Collections.Generics.List<T> 클래스를 선택하는 것이 좋습니다. 선언을 private List<Person> store;으로 변경하십시오. 제네릭 컬렉션을 사용하면 객체를 다시 가져와야하는 코드에서 컬렉션에 다른 유형의 객체를 추가 할 수 없기 때문에 객체의 유형을 알 수 있습니다.

둘째, 이벤트 처리기를 정의하기 전에 단추를 디자이너에 배치 할 때 이름을 지정하십시오. 코드는 자체 문서화되어야하며 "button1"이라는 버튼은 그것이 무엇을해야하는지 알려주지 않습니다. 이 버튼을 Toolbox에서 Form으로 드래그 한 후이 버튼에 "CreatePersonButton"이라는 이름을 지정한 경우 해당 버튼을 두 번 클릭하여 비헤이비어를 정의하면 이벤트 처리기의 이름이 "CreatePersonButton_Click"으로 지정됩니다.

관련 문제