먼저 강좌라고 하기엔 제가 아는게 너무 없어서.. 일단 제가 이해한 내용을 토대로 원문과 함께 공개 하겠습니다..
윈폼을 제작하다가 BaseForm을 추상클래스로 만들고자 했습니다.
그런데 BaseForm 을 구현하는 폼의 디자인모드를 정상적으로 제공하지 않았습니다..
빨강 글씨로 디자이너를 로드하는 동안 하나 이상의 오류가 발생했습니다
vs를 사용하다보면 가끔 보는 문구죠..;;
이문제를 해결하고자 구글링을 하다가 흥미로운 이슈를 발견했습니다..
먼저 요분께서 디자이너의 구동방식에 대해서 설명하십니다. 원문보기
우리가 윈폼을 하나 생성할때 빌드를 거치지 않은 상태 .. 해당 윈폼의 인스턴스가 없는데도
불구하고 어떻게 디자이너는 해당 폼을 표현하는가 하는 내용이었습니다...
그것은 VS 가 InitializeComponent() 메소드를 읽어들이고 부모클래스를 조회하고 해당내용을 CodeDomProvider 등을 사용하여 구현다고 말합니다. 결정적으로 추가된 폼은 인스턴스가 만들어지지도 않고 따라서 생성자가 호출되는 일도 없다고 하신것 같습니다.
이후에 어떤분이 덧글에 말씀하십니다.. 생성자는 호출된다.. 증명하겠다..
그러면서 생성자에 유효하지 않은 Database Connection 을 만들고 Open() 을 시켜보면
생성자가 호출되었다는것을 알수 있을것이다 하셨습니다..
그러자 또 어떤분이 내블로그로 오세요.~~ 하십니다. 원문보기
이분께서 기존에 이문제를 다루셨던 분들의 블로그에 링크를 걸어주십니다..
원문보기
이분께서는 예제 소스까지 제공하시는데요..저에게는 무척 흥미로운 내용이었습니다..
이런일이 있을줄은 전혀 몰랐거든요...
소스에는 폼 하나가 있고 그 안에 유저컨트롤 두개가 있습니다.. 형태는 없고 그저 페널처럼 영역만을
가지고 있습니다. 단 각각 로드 이벤트에서 두개의 메세지박스를 호출합니다..
따라서 컴파일을 하게되면 메세지박스는 순차적으로 네개가 나오면 되는겁니다.
해보시면 알겠지만 동시에 두개씩 총 8개가 나옵니다..
그럼 계속 그러냐...? 아닙니다 만약 디자인창에 떠있는 모든 창을 닫고 실행하면 정상적이나
디자인창에 실행폼의 디자인모드를 오픈함과 동시에 빌드나 컴파일도 없이 대뜸 메세지 박스가 떠버립니다..
또한 그상태에서 실행을 하면 마찬가지로 두번작업이 이루어지는데요 이분께서 그 메시지 박스에
정보를 담았습니다.. 프로세스를 확인하시면 아시겠지만 디자인모드가 열려있을때 비주얼스튜디오에서 나도몰래 실행시키고 있는거였습니다.
그 내용에 대한 부분은 msdn 에서 설명을 하고 있습니다. 원문보기
그리고 비주얼 스튜디오를 만들때..
비주얼베이직 닷넷을 해본적이 없어서 확인은 못해봤는데
비주얼베이직 닷넷팀은 시각적으로 표현하는것을 중요하게 생각해서 VS 가
InitializeComponent() 분석할때 문제가 발생하면 해당 코드를 지우지만
C#팀은 그렇게 하지 않고 코드는 유지하면서 예외를 발생시키는 쪽으로 했답니다.
결론은 VS가 소스를 분석하고 또한 별로로 실행을 하는거였네요...
아직 저도 내용을 완벽히 이해하지 못해서 이정도로만 씁니다..나머진 각자 .;;
제가 완벽하려면 언제 걸릴지 모르기때문에요..ㅎㅎ;
암튼 흥미로운 내용이었습니다..