2009-09-08 3 views
5

VB6 응용 프로그램을 컴파일하려고하는데 "런타임 오류 '91': Object variable 또는 With 블록 변수가 설정되지 않았습니다."오류로 실패합니다. 컴파일 중에 사용자 정의 컨트롤의 Resize 이벤트가 발생하고 인스턴스화되지 않은 개체에 액세스하려고 시도하는 코드가 나타납니다.VB6 앱을 컴파일하는 동안 이벤트가 실행되는 이유는 무엇입니까?

왜 컴파일하는 동안 이벤트가 발생하며 중지 할 수있는 방법이 있습니까?


편집 : 여기 몇 가지 코드를 가지고 있지만, 관련 아니에요. 이 문제는 UserControl 코드 (예 : Initialize, ReadProperties, Resize 및 WriteProperties 이벤트)가 예기치 않은 시간에 실행할 수 있다는 사실 때문에 발생합니다. 이러한 이벤트의 코드가 다른 코드를 사용하여 데이터 구조를 초기화하는 경우 초기화 코드가 실행되지 않았기 때문에 실패 할 가능성이 큽니다. 특히 컴파일 중에 아무 것도 실행되지 않아야합니다! 나는 이것을 버그라고 부르 겠지만, 마이크로 소프트가 어떻게 든 그것을 합리화 할 수 있다고 확신한다.

+1

당신의 컴파일 코드의 특정 블록에 지점합니까 (디버그시를)? 그렇다면 여기에 붙여 넣을 수 있습니까? 또한 빌드를 실행 한 다음 실행을 시도 할 때 폭탄을 생성하는 "빌드 및 실행"이 아니라고 확신합니까? (따라서 런타임 오류)? – JasCav

답변

6

프로젝트가 로 컴파일 할 때 여기에 프로젝트

컴파일 한 조각

인 사용자 컨트롤 이벤트

Understanding Control Lifetime and Key Events

의 라이프 사이클에 대한 좋은 기사입니다 응용 프로그램 또는 구성 요소, Visual Basic 은 모든 양식 파일을 보이지 않게로드합니다 ().하나씩 또 다른 순서대로 에 포함 된 정보를 에 기록합니다. 컨트롤 인스턴스는 Initialize, ReadProperties 및 WriteProperties 이벤트를 가져옵니다. 컨트롤의 속성 설정은 완료 실행 파일 으로 컴파일됩니다.

런타임 중에 또는 디자인 타임에 컨테이너의 usercontrol의 크기를 실제로 조정할 때 발생하는 resize는 언급되어 있지 않습니다. 어쩌면 Initialize 이벤트가 사용자 정의 컨트롤의 크기를 조정하고 있습니까?

잘못된 개체가 아무것도하기 전에 생성 된 경우 확인할 수있는 오류 방지하려면 :

If Not Object Is Nothing then 
    do something 
+0

또 다른 발언은 다음과 같습니다 * 사용자가 설치된 응용 프로그램이나 구성 요소를 실행하고 양식이로드 될 때마다 컨트롤이 Initialize, ReadProperties 및 Resize 이벤트를받습니다 * 양식이 보이지 않게로드되는 경우이 이벤트가 실행되는 이유를 설명합니다 . – raven

1

적어도 일관된 방식으로 렌더링하기 위해 사용자 컨트롤에 대한 일부 이벤트가 디자인 타임에 실행될 것이라고 생각합니다. 여기

+0

사용자 컨트롤의 경우 UserControl_Initialize() ... 이벤트를 트리거 할 수 있습니다. – Brian

+0

그들은 그것보다 더 많이 할 수 있습니다. UserControl의 EditAtDesignTime 속성을 참조하십시오. – Bob77

관련 문제