방법: Internet Explorer 스크립트 관리되는 C# 이벤트 싱크

기술 자료 번역 기술 자료 번역
기술 자료: 313891 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

구성 요소 개체 모델(COM) 클라이언트 (관리되지 않는 코드) 에서 관리되는 이벤트를 싱크하는 방법을 보여 줍니다 이 문서에서는 .NET Windows 컨트롤을 작성할 때. 예를 들어, Internet Explorer에서 스크립트를 실행할 때 COM 클라이언트가 관리되는 이벤트를 싱크하는.

쓸 COM에서 관리되는 형식을 사용하는 방법에 대한 자세한 내용은 다음 Microsoft .NET Framework 개발자 가이드 설명서를 참조하십시오.
.NET Framework 구성 요소 COM 노출
http://msdn2.microsoft.com/en-us/library/zsfww439(vs.71).aspx

요구 사항

다음은 권장되는 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩의 목록입니다.
  • Microsoft Visual Studio .NET
  • Microsoft Internet Explorer 버전 5.5 이상이 (프로그래밍)

Internet Explorer 스크립트 이벤트 싱크 단계를 관리

  1. 사용자 지정 Windows Forms 컨트롤을 만듭니다.
    1. Microsoft Visual Studio .NET 시작하십시오.
    2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트 를 클릭하십시오.
    3. 새 프로젝트 대화 상자의 프로젝트 형식Visual C# 프로젝트 클릭한 다음 템플릿 에서 Windows 컨트롤 라이브러리 를 누릅니다.
  2. 노출되어야 이벤트에 대한 원본 인터페이스를 정의하십시오.
  3. GuidAttribute 클래스의 소스 인터페이스를 추가하십시오. Guid 유형에 적합한 생성자 인수로 특성에 전달하는 문자열에 서식을 지정해야 합니다. Guidgen.exe를 파일을 사용하지 않는 GUID를 만들 수 있습니다.
    [GuidAttribute("0422D916-C11A-474e-947D-45A107038D12") ]
        
        public interface ControlEvents 
    
    		
        {
            //  Insert code here.
        }
    					
  4. 소스 인터페이스를 COM IDispatch 인터페이스와 노출하는 InterfaceType 특성을 추가하여:
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
        public interface ControlEvents 
    
    		
        {
           
            // Insert code here.
        }
    					
  5. 메서드 또는 필드는 COM 디스패치 식별자 (DISPID) 지정하려면 모든 구성원에게 원본 인터페이스에서 DispIdAttribute 추가:
    public interface ControlEvents 
    	
        {
            [DispIdAttribute(0x60020000)]
            void ClickEvent(int x, int y);
        }
    					
  6. 원하는 이벤트를 노출하는 래핑하는 새 이벤트 형식을 만듭니다.
  7. 사용자 지정 Windows Forms 컨트롤의 소스 인터페이스를 구현하십시오.
  8. COM 이벤트 소스로 노출되는 인터페이스 목록을 식별할 수 있는 컨트롤에 ComSourceInterfaces 특성 추가:
    [ClassInterface(ClassInterfaceType.None),ComSourceInterfaces(typeof(ControlEvents))]
    	public class MyWindowControl : System.Windows.Forms.UserControl 
        {
    
          // Insert code here.
        }
    					
  9. 컨트롤을 동적 링크 라이브러리(DLL) 파일로 컴파일하십시오.
  10. 이벤트를 후크하고 HTML 페이지에 스크립트 블록을 만듭니다. 예를 들어,:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=iso-8859-1' />
    
    <HTML>
    	<HEAD>
    		<TITLE>Sink managed event in Internet Explorer</TITLE>
    		
    		
    	</HEAD>
    	
    	<BODY>
    		
    		<OBJECT id="ctrl" classid="YourDllName.dll#ActiveXSourcing.MyWindowControl">
    		</OBJECT>
    		<SCRIPT LANGUAGE="JScript">
                function ctrl::ClickEvent(a,b)
                {
                    alert("MyWindowControl_ClickEvent");
                }
    		</SCRIPT>
    		
    	</BODY>
    </HTML>
    					
  11. 모든 클라이언트 시스템에 (Mscorcfg.msc를) .NET Framework 구성 도구를 사용하여 어셈블리에 필요한 개별 사용 권한을 부여합니다.

코드 목록 완료

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace ActiveXSourcing
{
	public delegate void ClickEventHandler(int x, int y); 

	//Source interface for events to be exposed.
	//Add GuidAttribute to the source interface to supply an explicit System.Guid.
	//Add InterfaceTypeAttribute to indicate that interface is IDispatch interface.
	[GuidAttribute("0422D916-C11A-474e-947D-45A107038D12") ]
	[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
	public interface ControlEvents 

		//Add a DisIdAttribute to any members in the source 
		//interface to specify the COM DispId.
	{
		[DispIdAttribute(0x60020000)]
		void ClickEvent(int x, int y);
	}

	//Add a ComSourceInterfaces attribute to the control to 
	//identify the list of interfaces that are exposed as COM event sources. 
	[ClassInterface(ClassInterfaceType.None),ComSourceInterfaces(typeof(ControlEvents))]
	public class MyWindowControl : System.Windows.Forms.UserControl 
		//, ComInteropControlInterface
	{
        System.Windows.Forms.TextBox tx = new TextBox();

		private void InitializeComponent()
		{
			
			this.Name = "MyWindowControl";

		}
	
		event ActiveXSourcing.ClickEventHandler ClickEvent;
    	
		public MyWindowControl() : base()
		{				               

			initMyWindowControl();

		}
        
		private void initMyWindowControl() 
		{

			Size = new System.Drawing.Size(300, 50);
			tx.Text = "Click on the TextBox to invoke  'ClickEvent'";
			tx.Size = this.Size;                  
			tx.Click += new System.EventHandler(ClickHandler);
			this.Controls.Add(tx);
			
		}
            
        
		private void ClickHandler(object sender, System.EventArgs e)
		{
			if (ClickEvent != null) 
			{
				ClickEvent(0, 0);
			}
		}
	}
}
				

참조

자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
처리 및 이벤트 발생
http://msdn2.microsoft.com/en-us/library/edzehd2t(vs.71).aspx

.NET Framework 구성 도구 (Mscorcfg.msc)
http://msdn2.microsoft.com/en-us/library/2bc0cxhc(vs.71).aspx

비관리 코드와의 상호 운용
http://msdn2.microsoft.com/en-us/library/sd10k43k(vs.71).aspx

Microsoft Internet Explorer에서 가벼운 클라이언트측 컨트롤 호스트 보안
http://msdn.microsoft.com/msdnmag/issues/02/01/UserCtrl/default.aspx
자세한 내용은 아래 문서 번호를 눌러 Microsoft 기술 자료에 있는 문서를 클릭하십시오.
316510BUG: Internet Explorer에서 이벤트 처리기 사용하면 보안 예외

속성

기술 자료: 313891 - 마지막 검토: 2007년 5월 17일 목요일 - 수정: 3.4
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Internet Explorer 5.5
키워드:?
kbmt kbcominterop kbhowto kbhowtomaster kbsample KB313891 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com