Cómo: Receptor de eventos administrado C# en secuencias de comandos de Internet Explorer

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 313891
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Para obtener una versión de Microsoft Visual Basic .NET de este artículo, consulte 316516.

Este artículo hace referencia al siguiente espacio de nombres de la Biblioteca de clases de Microsoft .NET Framework:
  • System.Runtime.InteropServices

En esta tarea

Resumen
Este artículo paso a paso muestra cómo recibir eventos administrados de clientes de modelo de objetos componentes (COM) (código no administrado) al escribir controles de Windows .NET. Por ejemplo, recibir eventos administrados desde clientes COM al ejecutar secuencia de comandos en Internet Explorer.

Para obtener información acerca de cómo escribir y utilizar tipos administrados desde COM, consulte documentación de la Guía del programador de Framework de .NET de Microsoft siguiente:
Exponer componentes de .NET Framework a COM
http://msdn2.microsoft.com/en-us/library/zsfww439(vs.71).aspx
back to the top

Requisitos

En la lista siguiente se describe el hardware, el software, la infraestructura de red y los service pack recomendados que se necesitarán:
  • Microsoft Visual Studio .NET
  • Microsoft Internet Explorer (programación) 5.5 o posterior
back to the top

Pasos para receptor administrado evento en secuencias de comandos de Internet Explorer

  1. Crear un control personalizado de formularios Windows Forms:
    1. Inicie Microsoft Visual Studio NET..
    2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto .
    3. En el cuadro de diálogo Nuevo proyecto , haga clic en Proyectos de Visual C# en Tipos de proyecto y, a continuación, haga clic en Biblioteca de controles de Windows , bajo plantillas .
  2. Definir para los eventos se expongan una interfaz de origen.
  3. Agregar una clase GuidAttribute a la interfaz de origen. Debe dar formato a la cadena que pasa al atributo como un argumento de constructor aceptable para el tipo de GUID. Puede utilizar el archivo Guidgen.exe para crear un GUID no utilizado.
    [GuidAttribute("0422D916-C11A-474e-947D-45A107038D12") ]        public interface ControlEvents 		    {        //  Insert code here.    }					
  4. Agregar un atributo InterfaceType a la interfaz de origen para exponer a COM como una interfaz IDispatch :
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]    public interface ControlEvents 		    {               // Insert code here.    }					
  5. Agrega un DispIdAttribute a todos los miembros en la interfaz de origen para especificar el identificador de envío (DISPID) COM de un método o un campo:
    public interface ControlEvents 	    {        [DispIdAttribute(0x60020000)]        void ClickEvent(int x, int y);    }					
  6. Crear un nuevo tipo de evento para ajustar el evento que desee exponer.
  7. Implementar la interfaz origen en el control de formularios Windows Forms personalizado.
  8. Agregar un atributo ComSourceInterfaces al control para identificar la lista de interfaces que se exponen como orígenes de eventos de COM:
    [ClassInterface(ClassInterfaceType.None),ComSourceInterfaces(typeof(ControlEvents))]	public class MyWindowControl : System.Windows.Forms.UserControl     {      // Insert code here.    }					
  9. Compile el control como un archivo de biblioteca dynamic-link (DLL).
  10. Crear un bloque de secuencia de comandos en la página HTML para enlazar el evento. Por ejemplo:
    <!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. En cualquier sistema de cliente, utilice la herramienta de configuración de .NET Framework (Mscorcfg.msc) para conceder al ensamblado los permisos individuales que son necesarios.
back to the top

Lista de código completa

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
Referencias
Para obtener más información, consulte los sitios Web de Microsoft siguientes:
Controlar y provocar eventos
http://msdn2.microsoft.com/en-us/library/edzehd2t(vs.71).aspx

Herramienta Configuración de .NET framework (Mscorcfg.msc)
http://msdn2.microsoft.com/en-us/library/2bc0cxhc(vs.71).aspx

Interoperación con código no administrado
http://msdn2.microsoft.com/en-us/library/sd10k43k(vs.71).aspx

Host seguro, controles de cliente ligeros en Microsoft Internet Explorer
http://msdn.microsoft.com/msdnmag/issues/02/01/UserCtrl/default.aspx
Para obtener información adicional, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
316510Error: Excepción de seguridad al utilizar controladores de eventos en Internet Explorer
back to the top

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 313891 - Última revisión: 12/07/2015 08:17:30 - Revisión: 3.4

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

  • kbnosurvey kbarchive kbmt kbcominterop kbhowto kbhowtomaster kbsample KB313891 KbMtes
Comentarios