2. 사용자 정의 컨트롤 디 버 깅

5804 단어
2. 사용자 정의 컨트롤 디 버 깅
원문 은 제 블 로 그 를 보 세 요.http://clzf.co/blog.php?id=2
지난 편 에 서 는 사용자 정의 컨트롤 을 만 드 는 방법 에 대해 서 얘 기 했 습 니 다. 사용자 정의 컨트롤 을 디 버 깅 하 는 방법 에 대해 서 소개 해 드 리 겠 습 니 다. 사실 저 는 이 편 이 큰 의미 가 없다 고 생각 합 니 다. 왜냐하면 저 는 디 버 깅 하 는 방법 을 말 하지 않 고 바로 창 에 가 져 가서 사용 하면 될 것 같 습 니 다.
이전 편 에 서 는 새 항목 을 만 들 때 바로 [창 컨트롤 라 이브 러 리 (Windows Forms Control Library)] 가 있다 는 것 을 잊 어 버 렸 습 니 다.
새로 만 든 후 오른쪽 단 추 를 누 르 면 속성 에서 볼 수 있 는 출력 형식 은 Class Library 입 니 다. Dll 을 해 봤 다 면 그때 컴 파일 할 때 exe 파일 이 아니 라 Dll 파일 이라는 것 을 알 게 될 것 입 니 다.
새로 만 들 면 오른쪽 에 기본적으로 User Control 1 을 새로 만들어 줍 니 다. 나 도 뭐라고 말 해 야 될 지 모 르 겠 어. 이 걸 자주 쓰 지 않 아. 이렇게.
이 물건 과 창 디자인 을 볼 수 있 습 니 다. 오른쪽 아래 에 있 는 속성 창 이 비슷 합 니 다. 바로 그 물건 입 니 다. 이 물건 으로 컨트롤 의 속성 을 설정 해서 컨트롤 을 디 버 깅 할 수 있 습 니 다. 위 에 서 는 그 컨트롤 을 디 버 깅 할 것 을 선택 할 수 있 습 니 다. 그리고 제 가 첫 번 째 글 에 쓴 MyControl 을 위 에 표시 하지 않 은 것 도 보 았 습 니 다.왜 그런 지 모 르 겠 어 요. 제 가 이 걸 잘 안 써 서 요.
간단하게 솔 루 션 오른쪽 단 추 를 누 르 고 WinForm 프로젝트 를 시작 프로젝트 로 설정 하면 됩 니 다.
그리고 저도 자주 그래 요. 만약 당신 의 컨트롤 이 하나의 WinForm 프로젝트 에 있다 면 잘 될 것 입 니 다. 제 가 말 하지 않 아 도 어떻게 해 야 할 지 알 고 있 습 니 다.
메모: WinForm 프로젝트 에서 창 을 열 면 왼쪽 도구 모음 에 컨트롤 이 보이 지 않 는 다 면 당황 하지 마 세 요. WinForm 프로젝트 에 대한 인용 오른쪽 단 추 를 누 르 십시오. -> 팝 업 창 선택 [항목] 옵션 에 인용 을 추가 하면 Dll 파일 을 사용 하면 됩 니 다.
여기 서 좀 말 해 주세요. 평소에 프로젝트 를 할 때 사용자 정의 컨트롤 을 사용 해 야 한다 면 한두 개의 컨트롤 만 있다 면 WinForm 프로젝트 와 함께 쓰 셔 도 괜 찮 습 니 다.Class Libaray 도 가능 합 니 다. 머 릿 속 에 컨트롤 라 이브 러 리 를 쓰 려 면 Control Library 만 새로 만 들 수 있다 고 생각 하지 마 세 요. 일반 Dll 파일 을 쓰 려 면 Class Library 만 새로 만 들 수 있 습 니 다. Class Library 는 System. Windows. Forms. Dll 의 인용 을 추가 하지 않 기 때문에 인용 에 추가 하면 제 가 말 하 는 것 은 세대 가 아 닙 니 다.코드 에 있 는 using 의 응용 은 dll 파일 의 참조 입 니 다.
다음은 재 미 있 는 현상 을 살 펴 보 겠 습 니 다.
public class MyControl : Control
{
    protected override void OnPaint(PaintEventArgs e) {
        this.Controls[1].Text = "- -!";
        base.OnPaint(e);
    }
}

만약 안에 이런 코드 를 쓰 면 어떤 결과 가 있 습 니까?컴 파일 은 틀림없이 통과 할 수 있 을 것 이다.
하면, 만약, 만약... 그러면 Form. controls 안 에는 창 에 있 는 button textbox 같은 것 이 Form 에 포 함 된 컨트롤 이 고 컨트롤 은 하위 컨트롤 이 있 을 수 있 습 니 다.
예 를 들 어 Panel 은 Panel 위 에 Button 을 하나 놓 을 수 있어 요. 이때 Button 은 Panel 에 속 합 니 다. Panel. Control 에 있 습 니 다. 이 Panel 이 Form 에 있 으 면 Form. Control 에서 Panel 만 찾 을 수 있 습 니 다. 그 Button 을 찾 으 려 면 Form. Control ["Your Panel Name"or Index]. Control ["Your Button Name"or Index]. 됐어. 멀리 갔 어.
위의 코드 를 보면 틀 리 지 않 은 전 제 는 MyControl 에 최소 두 개의 컨트롤 이 있 을 때 이 코드 가 맞 는 것 입 니 다. 그러나 우리 가 왼쪽 도구 모음 에서 두 번 눌 러 서 창 에 추가 할 때:
당 첨 축하 해 요. 근 데 조심 하 세 요. 오류 상자 가 튀 어 나 와 물건 을 잔뜩 튕 기 는 것 을 절대 보지 마 세 요. 그것 도 XX 라 고 당 황 스 러 워 하 는 경우 가 많 습 니 다. 앞으로 자신의 코드 를 한 번 에 정확하게 쓸 수 있 는 사람 이 없 을 수도 있 습 니 다.
왜 틀 렸 는 지 분석 해 볼 까요?MyControl 컨트롤 에 서 는 나중에 하위 컨트롤 이 존재 할 수 있 음 을 배제 하지 않 습 니 다. 하지만 컨트롤 이 창 에 추 가 될 때 하위 컨트롤 이 없 지만 컨트롤 이 그 려 질 때 Paint 이 벤트 를 실행 합 니 다. 컨트롤 이 창 에 추가 되 었 기 때문에 컨트롤 은 자신 을 그 려 서 Paint 이 벤트 를 수행 합 니 다. Paint 에 비극 적 인 코드 가 생 겨 서 비극 적 입 니 다.이런 문 제 는 처리 하기 어 려 우 니 직접 컨트롤 코드 를 고치 면 된다
하나 더 보기:
4. 567913. 이렇게 창문 에 올 려 놓 으 면 어떻게 되 는 지 볼 까요?
얘 야, 이게 최 악의 상황 이 라 고 생각하면 틀 렸 어.
첫 번 째 는 컨트롤 자체 에 문제 가 생 겼 다 는 것 입 니 다. 이 건 MyControl 의 등장 으로 인해 Form 에 문제 가 생 겼 기 때 문 입 니 다. 이런 상황 에서 적어도 IDE 에 있 으 니 코드 를 고 칠 기회 가 있 습 니 다. 이런 상황 에서 Form 의 Designer. cs 에 가서 컨트롤 과 관련 된 것 을 삭제 하고 다시 컴 파일 하면 됩 니 다.
그래, 찾 지 마. Designer 파일 을 열 면 MyControl 의 물건 을 찾 을 수 없어.설계 자 를 무 너 뜨리 는 잘못저 는 그때 개발 과정 에서 발생 할 수 있 는 문 제 를 열거 하고 있 을 뿐 입 니 다.
두 가지 상황 을 말씀 드 렸 는데 하 나 는 본인 이 문제 가 생 겼 어 요. 하 나 는 디자이너 를 무 너 뜨리 는 거 예요. 다음 에 제 가 얘 기 할 건 바로 IDE 를 무 너 뜨리 는 거 예요. 알 겠 습 니 다. 이런 상황 을 두 번 밖 에 못 만 났 는데 어떻게 해 야 될 지 모 르 겠 지만 제 가 제일 아 픈 상황 을 일 으 킬 수 있어 요.
컨트롤 에 적 힌 코드 를 이해 합 니 다. 컨트롤 이 창 에 추 가 될 때 F5 가 아 닌 IDE 가 일부 실 행 될 때 실 행 됩 니 다.World 와 마찬가지 로 위 에 열거 한 두 가지 오류 가 있 습 니 다. 창 에 추 가 했 을 때 부터 정상 적 인 프로그램 처럼 실행 되 었 기 때문에 이런 문제 가 있 을 수 있 습 니 다.실행 중 문제 가 붕 괴 된 것 을 제외 하고 여기 서 붕 괴 된 것 은 IDE 입 니 다. 아직 끝나 지 않 았 습 니 다. IDE 가 뛰 고 나 서 IDE 를 열 어 보 세 요. 축하합니다. IDE 가 그 코드 를 다시 불 러 오기 때문에 계속 붕 괴 됩 니 다.대상 당 첨 을 축하합니다. 괜 찮 습 니 다. VS 그렇게 어 리 석 지 는 않 습 니 다. 제 가 두 번 봤 을 때 리 셋 을 했 습 니 다. 한두 번 도 제대로 되 지 않 았 을 때 다시 열 었 을 때 vs 여러 번 열 어도 성공 하지 못 했다 는 걸 알려 드 립 니 다. 그리고 그냥 파일 을 열 고 실행 하지 않 습 니 다. 축 하 드 려 요. 빨리 코드 를 바 꾸 고 다시 컴 파일 하 세 요.
다음은 마지막 이자 가장 아 픈 상황 입 니 다. MyControl 에 이런 코드 를 쓰 면:
4. 567913. 컨트롤 을 창 에 추가 하면 어떤 효과 가 있 습 니까?
특등 당 첨 을 축하합니다.(물론 이 상 자 는 위의 한 상황 에서 나 올 수도 있 습 니 다. 위 에 있 는 상황 이 라면 대부분 스스로 튀 어 나 온 것 입 니 다.자동 으로 튀 어 나 오 는 게 아니 라 엄 밀 히 말 하면 순환 이 잘못된 게 아니 라 while (true) 하면 컴 파일 이 안 돼 요? 그냥 순환 에서 튀 어 나 오지 않 았 을 뿐 이에 요. 그래서 환경 은 계속 순환 을 하고 있 습 니 다) 위 에 있 는 상황 이 라면 괜 찮 습 니 다. 몇 번 을 괴 롭 히 지 않 을 것 입 니 다. 당신 은 몇 번 을 와 도 똑 같 습 니 다 vs 열 자마자 끊 겨 죽 습 니 다. 위 에서 말 한 것 처럼 코드 가 틀린 순환 이 아 닙 니 다. 왜 요? 평소에 코드 를 쓸 때 도 순환 적 인 표기 법 을 자주 사용 합 니 다. 여기 코드 가 안에 논 리 를 쓰 지 않 았 을 뿐 입 니 다. 그 러 니까 니 가 아무리 괴롭혀 도 vs vs 는 열 면 끊 겨 죽 어. vs 힘 들 면 안 할 거 라 고 기대 하지 마. 자기 만 얌전 히 실 용적 인 메모 장 같은 거 찾 아서 창 에 있 는 Designer 를 찾 아서 컨트롤 관련 코드 를 삭제 하 세 요. vs 시작 할 때 파일 을 불 러 오 는데 Designer 파일 에 컨트롤 을 창 에 추가 할 코드 가 있어 서 결 과 를 추가 하면 비극 적 이 니까 지우 면 돼 요.
내 위 에 있 는 게 배 불 러 서 배 부 르 고 할 일이 없다 고 생각 하 겠 지만 당신 은 앞으로 쓴 코드 가 반드시 위의 상황 이 나타 나 지 않 을 것 이 라 고 장담 할 수 있 습 니까? 당신 의 코드 안에 서 는 절대로 부주의 로 인해 순환 이 나타 나 지 않 을 것 입 니까?
일반적으로 오류 가 발생 하 는 방식 은 두 가지 가 있 습 니 다. 하 나 는 컨트롤 에 문제 가 있어 서 창 에 추가 하 는 것 입 니 다. 오류 가 발생 했 습 니 다. 또 하 나 는 컨트롤 이 창 에 추가 되 었 고 컨트롤 도 삭제 하지 않 았 습 니 다. 그리고 컨트롤 의 코드 컴 파일 결 과 를 계속 수정 하 다가 비극 을 발 견 했 습 니 다.
위 에서 제 가 열거 한 앞의 세 가지 상황 은 첫 번 째 에 속 하 는 것 입 니 다. 왜 마지막 이 아 닙 니까? 마지막 도 첫 번 째 에 속한다 면 당신 의 IDE 는 한 번 만 걸 립 니 다. 위 에서 열거 한 두 번 째 상황 처럼 컨트롤 이 전혀 추가 되 지 않 았 기 때 문 입 니 다. 추가 과정 에서 비극 이 발생 했 기 때 문 입 니 다. 위의 두 번 째 상황 은 창 을 닫 는 것 입 니 다. 마지막 은...데 드 사이클 그 때 는 컨트롤 이 창 에 제대로 추가 되 지 않 았 기 때문에 마지막 오 류 는 제 가 먼저 컨트롤 을 창 에 추가 해서 Designer 에 제 컨트롤 이 있 게 한 다음 에 제 가 쓰 는 데 드 사이클 입 니 다.
디 버 깅 에 대해 서 는 잠시 여기까지 쓰 겠 습 니 다.

좋은 웹페이지 즐겨찾기