28
A
답변
16
양식을 만들 때 즉시 표시 여부와 관계없이 생성자의 코드가 실행됩니다. Form.Load
이벤트로 실행되는 코드는 이벤트 핸들러이므로 실제로 폼에 가입 한 다른 클래스의 코드에서 코드를 실행할 수 있습니다. 마찬가지로 (양식에서) Form.OnLoad method을 사용하여 코드를 실행할 수 있습니다.
폼의 Load 이벤트 (및 폼에서 더 나은 선택 인 OnLoad 재정의 가능 메서드)는 폼이 초기화 된 후에 실행됩니다. 양식의 모든 컨트롤이 이미 구성되어 있고 더 중요한 것은 모든 양식 레이아웃이 발생했기 때문에이 기능은 종종 장점이 있습니다.
27
Load 이벤트를 사용하지 마십시오. OnLoad() 메서드를 재정의하십시오. 이렇게하면 폼 클래스에서 파생 될 때 모든 것이 예측 가능한 순서로 실행됩니다. 실제 양식의 크기를 알아야하는 양식 초기화에만 사용해야합니다. 크기 조정이나 사용자 기본 설정으로 인해 디자인 크기와 다를 수 있으며 실제 크기는 기본 창이 만들어 질 때까지 알 수 없습니다.
OnLoad 메서드에서 컨트롤을 초기화 할 수는 있지만 ListView 및 TreeView의 경우 특히 느려질 수 있습니다. 생성자에서 초기화하면 기본 Windows 컨트롤을 만들 때 대량으로 초기화 할 수 있습니다.
한 가지 특별한 예외 : MDI 자식 창 만들기는 항상 OnLoad()에서 수행해야합니다. 생성자에서 자식을 만들 때 MDI 막대를 엉망으로 만드는 배관 코드에 버그가 있습니다.
관련 문제
- 1. asp.net 웹 폼 생성자?
- 2. Application_Start 대 OnInit 대 생성자
- 3. Winforms 폼 생성자 대로드 이벤트
- 4. C# 생성자 중 폼 닫기
- 5. 템플릿 생성자 대 템플릿 복사 생성자
- 6. Android - Activity 생성자 대 onCreate
- 7. C# Form_Load 이벤트 메서드
- 8. JInternalFrame의 form_load 이벤트는 어디에 있습니까?
- 9. Delphi : 레코드 생성자 대 팩토리 함수
- 10. 생성자 매개 변수 대 메서드 매개 변수?
- 11. 드물게 사용 된 서비스 - 생성자 대 메서드
- 12. 변환 생성자 대 변환 연산자 : 우선 순위
- 13. Objective C 정적 대 동적 생성자
- 14. 사용자 정의 컨트롤 대 Windows 폼
- 15. Symfony 임베디드 폼 - 다 대 다 관계
- 16. 반환 유형 표시 : 폼 대 창
- 17. 왜 이벤트 : comboBox_SelectedIndexChanged가 form_load 이벤트에서 trigered됩니까?
- 18. WebBrowser 컨트롤이 Form_Load 중에 응답하지 않습니다.
- 19. Ninject에서 생성자 생성자 상속
- 20. 생성자
- 21. 생성자
- 22. 생성자 및 Java
- 23. ASP.Net MVC 2에서 브라우저 새로 고침 대 폼 제출 확인
- 24. MonoRail - 서버 측 대 클라이언트 측 폼 검증
- 25. GUI 디자인 - 여러 폼 대 시뮬레이션 된 MDI (탭) 대 PageControl
- 26. 빠른 윈도우 폼 + 출력을위한 자동 대용량 대 자동 힌트 대 C#
- 27. 개인 생성자 및 공용 매개 변수 생성자
- 28. 이동 생성자 기본 클래스 이동 생성자
- 29. lua 생성자 함수에서 생성자 함수를 사용하는 경우
- 30. 오버로드 "기본"생성자 또는 "이"생성자?
몇 가지 사항 : 1 - 얼마나 자주 당신은 그것을 보이지 않는 양식을 만들겠습니까? (당신의 의존성이 지연된 Instansiation으로 적절하게 주입된다면 Esp) 2- 아래의 @Hans에서 언급했듯이, 폼의 모든 컨트롤이 응답하려고하므로 레이아웃이 일시 중지되지 않은 상태에서 컨트롤 초기화에 대한 성능 패널티가 발생합니다 초기화되는 동안 다시 그리기 이벤트 같은 것들. 3 나는 내 자신의 코드를 호출하기 위해 OnLoad를 사용하지 않는다. 오히려 MyAction()에 대한 메소드를 작성하고 OnLoad에서 MyAction()을 호출하십시오. 그렇지 않으면 MyAction을 수행하기 위해 OnLoad를 호출해야한다는 것이 소비자에게 명확하지 않습니다. – Fred
@Fred 필자가 작성한 것과 충돌에 대해서는 논쟁 할 것이 없습니다. 나는 OnLoad가 초기화 후에 일어난다는 것을 구체적으로 언급했고, OnLoad에 * controls *를 추가 할 것을 제안하지 않았다. 귀하의 요점에 관해서는 3 - 소비자는 절대로 "OnLoad를 호출"- 그것은 런타임에 발생합니다. 코드가 다른 위치에서 재사용되지 않으면 다른 방법을 소개 할 때 별다른 장점이 없습니다. (그러나 "MyAction"이 재사용 될 것이라면 완전히 동의합니다. 내 답변은 배제하지 않거나 제안하지 않습니다.) –
컨트롤 추가를 생각하지 마십시오. 다운 목록, 목록 상자 등? 나는 경험을 통해 OnLoad에서 더 느린 것을 이야기합니다. MyAction에 대한 요점은 첫 번째 단락의 끝 부분을 해석 한 것입니다 (아마도 잘못). 전반적으로, 일반적인 경험 법칙은 onload에서 "중요"하지 않는다고 말하고 싶습니다. 내가 생각할 수있는 유일한 유효한 동작은 현재 레이아웃 정보 (예 : 폼의 크기/컨트롤의 픽셀 위치)를 필요로하는 것입니다. 발표자가 데이터 초기화를 처리해야하므로 프리젠 테이션 패턴 (예 : MVP)을 따르는 것이 중요합니다. – Fred