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

Seleccione idioma Seleccione idioma
Id. de artículo: 313891 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

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

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

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.

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);
			}
		}
	}
}
				

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

Propiedades

Id. de artículo: 313891 - Última revisión: jueves, 17 de mayo de 2007 - Versión: 3.4
La información de este artículo se refiere a:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Internet Explorer 5.5
Palabras clave: 
kbmt kbcominterop kbhowto kbhowtomaster kbsample KB313891 KbMtes
Traducción automática
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

Enviar comentarios

 

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