방법: 매크로에서 특정 프로젝트 형식에 대한 이벤트 처리기 만들기
업데이트: 2007년 11월
모든 매크로 프로젝트에 포함되어 있는 EnvironmentEvents 템플릿에는 몇 가지 미리 선언된 이벤트 처리기가 들어 있습니다. 이러한 이벤트 처리기는 창 닫기 등과 같은 여러 가지 환경 이벤트에 대한 응답으로 구현할 수 있습니다. 구현이 제공되면 이러한 일반 확장성 이벤트 처리기는 Visual Studio IDE(통합 개발 환경)에서 지정된 이벤트가 발생할 때마다 이를 자동으로 가로챕니다. 자세한 내용은 방법: 매크로에서 환경 이벤트 처리를 참조하십시오.
고유한 IDE 이벤트 처리기를 EnvironmentEvents 템플릿에 추가할 수도 있습니다. 이벤트 변수를 선언하고, 이벤트 처리기 코드를 제공하고 OnMacrosRuntimeReset 및 OnStartupComplete 처리기를 추가하여 Visual Studio IDE에서 이벤트 가로채기를 자동화할 수 있습니다.
이 예제에서는 Visual C#, Visual Basic 또는 Visual J# 프로젝트에 참조를 추가할 때 실행되는 ReferencesEvents 이벤트 처리기를 추가합니다.
![]() |
---|
표시되는 대화 상자와 메뉴 명령은 실제 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다. 이러한 절차는 일반 개발 설정을 사용하여 개발되었습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 Visual Studio 설정을 참조하십시오. |
매크로에 VSLangProj 이벤트 처리기를 추가하려면
매크로 IDE에서 프로젝트 메뉴의 참조 추가를 클릭합니다.
참조 추가 대화 상자에서 VSLangProj를 선택하고 추가를 클릭한 다음 확인을 클릭합니다.
매크로 IDE의 클래스 뷰 탐색기 창에서 MyMacros를 확장하고 EnvironmentEvents를 두 번 클릭하여 매크로 편집기 창에 표시합니다.
EnvironmentEvents 모듈의 맨 위에 다음 코드를 추가합니다.
Imports VSLangProj
"자동 생성된 코드 - 수정하지 마십시오."라는 레이블이 붙어 있는 EnvironmentEvents 모듈의 숨겨진 영역 다음에 이벤트 선언을 입력합니다.
<System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
이 선언을 입력하면 ReferencesEvents 및 이 클래스의 메서드가 매크로 IDE 코드 편집기의 클래스 이름 및 메서드 이름 드롭다운 상자에 추가됩니다.
클래스 이름 드롭다운 상자에서 DTEEvents 클래스를 선택하고, 메서드 이름 드롭다운 상자에서 OnMacrosRuntimeReset 및 OnStartupComplete 메서드를 선택합니다.
이렇게 하면 이 두 이벤트에 대한 이벤트 처리기가 작성됩니다. 이러한 이벤트 처리기는 Visual Studio IDE에서 이벤트가 발생할 때마다 ReferencesEvents 처리기가 이를 자동으로 가로채는 데 필요합니다.
다음과 같이 EnvironmentEvents.refEvents 캐스트를 추가하여 이벤트 처리기를 수정합니다. Visual Basic 또는 Visual J# 프로젝트에 참조가 추가될 때 이벤트를 가로채려면 CSharpReferencesEvents 문자열을 각각 VBReferencesEvents 또는 VJSharpReferencesEvents로 바꿉니다.
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles_ DTEEvents.OnMacrosRuntimeReset EnvironmentEvents.refEvents_ =CType(DTE.Events.GetObject("CSharpReferencesEvents")_ , ReferencesEvents) End Sub
및
Private Sub DTEEvents_OnStartupComplete() Handles_ DTEEvents.OnStartupComplete EnvironmentEvents.refEvents_ = CType(DTE.Events.GetObject("CSharpReferencesEvents")_ , ReferencesEvents) End Sub
마지막으로, EnvironmentEvents 모듈에 다음 코드를 붙여넣거나 클래스 이름 드롭다운 상자에서 refEvents를 선택하고 메서드 이름 드롭다운 상자에서 ReferenceAdded를 선택하여 이벤트 처리기를 만듭니다. 다음과 같이 이벤트 처리기에 MsgBox(pReference.Name & " was added to the project.") 줄을 추가합니다.
Public Sub refEvents_ReferenceAdded(ByVal pReference As VSLangProj.Reference) Handles refEvents.ReferenceAdded MsgBox(pReference.Name & " was added to the project.") End Sub
이벤트 처리기를 테스트하려면 종류에 상관없이 새 Visual C# 프로젝트를 만듭니다.
프로젝트 템플릿에 자동으로 추가되는 각 참조에 대해 메시지 상자가 나타납니다.
예제
이 코드는 전체 예제를 보여 줍니다. 아래 코드를 매크로 프로젝트의 EnvironmentEvents 모듈에 붙여넣을 수 있습니다.
![]() |
---|
이 이벤트 처리기를 추가하면 지정된 프로젝트 형식에 참조가 추가될 때마다 이 처리기가 실행됩니다. 참조가 추가될 때마다 알림 메시지가 표시되지 않도록 하려면 이 코드를 주석으로 처리합니다. |
<System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles_
DTEEvents.OnMacrosRuntimeReset
EnvironmentEvents.refEvents= _ CType(DTE.Events.GetObject("CSharpReferencesEvents")_ , VSLangProj.ReferencesEvents)
End Sub
Private Sub DTEEvents_OnStartupComplete() Handles_
DTEEvents.OnStartupComplete
EnvironmentEvents.refEvents = _ CType(DTE.Events.GetObject("CSharpReferencesEvents")_ , VSLangProj.ReferencesEvents)
End Sub
Public Sub refEvents_ReferenceAdded(ByVal pReference As VSLangProj.Reference) Handles refEvents.ReferenceAdded
MsgBox(pReference.Name & " was added to the project.")
End Sub