如何: 接收 Managed 的 C# 事件在 Internet Explorer 的指令碼

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:313891
本文已封存。本文係以「現狀」提供且不會再更新。
本文章的有 Microsoft Visual Basic.NET] 版本請參閱 316516

本文參照下列 Microsoft.NET Framework 類別庫命名空間:
  • System.Runtime.InteropServices

在此工作

結論
本文將逐步告訴您如何從元件物件模型 (COM) 用戶端 (Unmanaged 程式碼) 接收 Managed 的事件當您撰寫.NET Windows 控制項。比方說您 Managed 從接收事件的 COM 用戶端在 Internet Explorer 中執行指令碼時。

如何撰寫,以及使用來自 COM 的 Managed 型別資訊,請參照下列 Microsoft.NET Framework 開發人員指南 》 文件: back to the top

需求

下列清單列出建議的硬體、 軟體、 網路基礎結構及您需要的服務套件:
  • Microsoft Visual Studio.NET
  • Microsoft Internet Explorer 5.5 或更新版本程式設計
back to the top

接收器 Managed 的事件在 Internet Explorer 指令碼中的步驟

  1. 建立自訂的 Windows Form 控制項:
    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. 新增來源介面公開 (Expose) 為 IDispatch 介面的 COM 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. 建立新的事件類型,以包裝所要的事件,公開 (Expose)。
  7. 自訂的 Windows Form 控制項上實作來源介面。
  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. 在任何的用戶端系統上使用.NET Framework 組態工具 (Mscorcfg.msc) 授與組件個別所需的權限。
back to the top

完成程式碼清單

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);			}		}	}}				
back to the top
参考
如需詳細資訊,請參閱以下列 Microsoft 網站: 如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
316510注意: 安全性例外狀況在 Internet Explorer 中使用事件處理常式時
back to the top

警告:本文為自動翻譯

內容

文章識別碼:313891 - 最後檢閱時間:12/07/2015 08:17:33 - 修訂: 3.4

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Internet Explorer 5.5

  • kbnosurvey kbarchive kbmt kbcominterop kbhowto kbhowtomaster kbsample KB313891 KbMtzh
意見反應