COMO: Sink de eventos de gestão C# no script do Internet Explorer

Traduções de Artigos Traduções de Artigos
Artigo: 313891 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo mostra como receber eventos geridos de clientes de COM (Component Object Model) (código não gerido) quando escreve controlos do .NET Windows. Por exemplo, receber eventos geridos de clientes COM quando executa o script no Internet Explorer.

Para obter informações sobre como escrever e utilizar tipos geridos de COM, consulte Guia de documentação o seguinte Microsoft .NET Framework para programadores do:
Expor o .NET Framework Components para COM
http://msdn2.microsoft.com/en-us/library/zsfww439(vs.71).aspx

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
  • Microsoft Visual Studio .NET
  • Microsoft Internet Explorer versão 5.5 ou posterior (programação)

Passos para sink gerido pelo evento no script do Internet Explorer

  1. Crie um controlo personalizado do Windows Forms:
    1. Inicie o Microsoft Visual Studio NET..
    2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .
    3. Na caixa de diálogo Novo projecto , clique em Visual C# Projects em Project Types e, em seguida, clique em Biblioteca de controlo do Windows em modelos .
  2. Defina uma interface de origem para os eventos sejam apresentados.
  3. Adicione uma classe GuidAttribute à interface de origem. Tem de formatar a cadeia que passar para o atributo como um argumento do construtor aceitável para o tipo de GUID. Pode utilizar o ficheiro Guidgen.exe para criar um GUID não utilizado.
    [GuidAttribute("0422D916-C11A-474e-947D-45A107038D12") ]
        
        public interface ControlEvents 
    
    		
        {
            //  Insert code here.
        }
    					
  4. Adicionar um atributo InterfaceType à interface de origem para expor COM como uma interface IDispatch :
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
        public interface ControlEvents 
    
    		
        {
           
            // Insert code here.
        }
    					
  5. Adicionar um DispIdAttribute quaisquer membros na interface de origem para especificar o identificador de distribuição COM (DISPID) de um método ou um campo:
    public interface ControlEvents 
    	
        {
            [DispIdAttribute(0x60020000)]
            void ClickEvent(int x, int y);
        }
    					
  6. Crie um novo tipo de evento para moldar o evento pretendido para expor.
  7. Implementa a interface origem do controlo Windows Forms personalizado.
  8. Adicionar um atributo ComSourceInterfaces para o controlo para identificar a lista de interfaces que são expostos como origens de eventos COM:
    [ClassInterface(ClassInterfaceType.None),ComSourceInterfaces(typeof(ControlEvents))]
    	public class MyWindowControl : System.Windows.Forms.UserControl 
        {
    
          // Insert code here.
        }
    					
  9. Compile o controlo como um ficheiro de biblioteca de ligação dinâmica (DLL).
  10. Crie um bloco de script na página de HTML para ligar o evento. Por exemplo:
    <!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. Em qualquer sistema cliente, utilize a ferramenta de configuração do .NET Framework (Mscorcfg.msc) para conceder as permissões individuais que são necessárias a assemblagem.

Concluir lista de código

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

Referências

Para mais informações, consulte os seguintes Web sites da Microsoft:
A processar e aumentar os eventos
http://msdn2.microsoft.com/en-us/library/edzehd2t(vs.71).aspx

Ferramenta de configuração do .NET framework (Mscorcfg.msc)
http://msdn2.microsoft.com/en-us/library/2bc0cxhc(vs.71).aspx

Interagir com o código não gerido
http://msdn2.microsoft.com/en-us/library/sd10k43k(vs.71).aspx

Anfitrião seguras, controlos de lado do cliente LDAP no Microsoft Internet Explorer
http://msdn.microsoft.com/msdnmag/issues/02/01/UserCtrl/default.aspx
Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
316510Erro: Excepção de segurança quando utiliza processadores de eventos no Internet Explorer

Propriedades

Artigo: 313891 - Última revisão: 17 de maio de 2007 - Revisão: 3.4
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Internet Explorer 5.5
Palavras-chave: 
kbmt kbcominterop kbhowto kbhowtomaster kbsample KB313891 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 313891

Submeter comentários

 

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