대리자를 잘못 사용해서 나타난 버그..
JSFW.Mockup 프로그램을 사용하다가 예외가 뜨길래 디버깅을 해봤다.
전달되어야 할 대리자가 null 이었다. 왜지?
처음엔 if문으로 null체크하고 넘어갔는데, 왠지 모를 찝찝함으로 계속 테스트를 하면서 왜 null 이 되는지 찾았다.
mockup의 속성에서 Editor를 띄워서 컬럼목록으로 컨트롤을 생성하는 창을 띄웠다.
그리고 이 창에서 컨트롤을 생성하여 드래그 앤 드랍으로 원하는 위치에 떨어뜨린다.
그리고 떨어뜨린 컨트롤을 선택했을때
1. 속성창에 해당 컨트롤의 속성들을 보여준다.
2. 선택된 컨트롤을 지정해둔다.
- delete 키를 눌렀을때 해당 컨트롤 삭제 처리해야 하기때문에...
근데 여기서 문제가... 창에서 생성된 컨트롤에 이벤트를 부여할때
판넬.대리자를 넘겨준다. => 기본Editor 객체 => 생성창 => 생성된 컨트롤.대리자 = 넘어온.대리자;
여기서 배치가 끝나고 생성창을 닫으면! 실제 컨트롤.대리자 에 할당되어 있던 넘어온.대리자(판넬.대리자)가 null값이 되었다.
그래서 선택된 컨트롤로 지정이 안되어 삭제가 안되고 이전에 이벤트를 제대로 탄 객체가 선택되어진채 있다가 delete 누르면 그게 날아간다.
이걸 기본Editor에서 컨트롤을 생성하여 드래그 앤 드랍 처리를 하고 이벤트도 여기서 붙인다.
그리고 이 메서드를 대리자를 통해서 생성창에 넘기고, 생성된 컨트롤.대리자에 또 넘겨준다.
실제 컨트롤을 드래그를 시작하면 원래 Editor개체에서 생성을 하여 직접 전달하게 된다.
창이 닫혀도 이벤트는 계속 유지되기 때문에... 정상동작되는 것을 확인하였다.
글로 쓰니 ...alskdjflasjdflaj
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
그룹 박스 그리기 ( 객체 다중 선택 ) (0) | 2016.08.07 |
---|---|
Scroll 같은? 눈속임?? (0) | 2016.07.22 |
Mover] 구형 신형. (0) | 2016.07.19 |
다른 프로그램을 내 프로그램 판넬에 띄우는 방법 (0) | 2016.02.23 |
3가지중 1개로 선택해서 바꿈] 더블 삼항연산자 (0) | 2013.08.01 |