2009-05-12 5 views
4

VB 프로젝트를로드 할 때마다 Initialize 이벤트가 사용자 정의 컨트롤 (있는 경우)이 호출됩니다. 내 문제는 내가 다른 COM 개체의 인스턴스를 만들려고 UserControl_Initialize에 몇 가지 코드가 있다는 것입니다. 내 빌드 컴퓨터에서 해당 컨트롤이 등록되어 있지 않습니다. 하나의 옵션은 코드를 Initialize이 아닌 다른 방법으로 옮기는 것이지만 더 좋은 해결책이 있는지 알고 싶습니다. 어딘가에 호출하는 응용 프로그램이 VB 편집기인지 확인한 다음 초기화 코드를 건너 뛸 수 있는지 확인합니다.VB6.0 : VB 프로젝트를로드 할 때 호출되는 사용자 정의 컨트롤의 메서드

+1

코드 해결 방법을 찾으셨습니까? 또한 모든 종류의 바람직하지 않은 코드가 실행되도록 컴파일하는 동안 Initialize를 호출합니다. – Deanna

답변

1

이 경우는 양식 디자이너와 함께 프로젝트를 저장 한 경우에만 발생합니다. 양식이 표시됩니다 (배경에있을 수 있음). 따라서 모든 컨트롤을 초기화해야합니다. 따라서이 컨트롤을 폼에 사용하는 경우 사용자 컨트롤 초기화 도구는 이라고합니다.

이 문제를 방지하려면 양식 디자이너를 닫은 상태로 프로젝트를 저장하기 만하면됩니다. 우리가 사용

If Not Me.DesignMode Then 
    ... 
End If 

타 솔루션은 전 세계적으로 사용할 수있는 작은 기능이었다 :

+1

네가 옳다. 하지만 내 문제는 디자이너가 닫힌 상태에서 각 개발자가 프로젝트 파일을 확인하는지 확신 할 수 없다는 것입니다. ( – Paragon

+0

양식 열기 상태는 작업 폴더의 .vbw 파일에 저장됩니다. 프로젝트를로드 할 때 모든 것을 닫도록 강제로 읽기 전용으로 설정하십시오. – Deanna

+1

@KonradRudolph 프로젝트를 컴파일 할 때'_Initialize'도 호출합니다. – Deanna

5

당신은 사용할 수는 구문 적으로 잘 구성되어있는 경우

Public Function IsRuntime() as Boolean 
    On Error Goto NotRuntime 
    Debug.Print(1/0) 
    IsRuntime = True 
    Exit Function 
NotRuntime: 
    IsRuntime = False 
End If 

는 모르겠지만 아이디어는 명확해야합니다 : IDE에서만 디버그 문이 호출됩니다.

+0

Thanks H-Man2 :). 두 번째 해결책은 훌륭합니다. Me.DesignMode에 대한 첫 번째 해결책은 VB6에서 옵션이 아닙니다. 아마도 VB.NET에서 소개되었습니다. – Paragon

+4

첫 번째 해결 방법은 If Not Ambient.UserMode for VB6입니다. 예를 들어, http://msdn.microsoft.com/en-us/library/aa241637(VS.60).aspx – MarkJ

+2

두 솔루션의 동작이 약간 다릅니다. 첫 번째 솔루션은 컨트롤이 디자인 모드에있을 때 코드를 항상 꺼야합니다 (컨트롤을 OCX로 빌드하면 차이가 있습니다). 두 번째 솔루션은 디자인 모드 * 또는 실행 모드 *에서 IDE를 실행할 때 항상 코드를 전환합니다. IDE에서 실행할 때 런타임 문제를 테스트하기 위해 컨트롤이 올바르게 작동하지 않을 수 있습니다. – MarkJ

관련 문제