2008-11-18 3 views
1

J'ai créé un contrôle de formulaire Windows qui fonctionne correctement dans Internet Explorer. Je voudrais lui donner un événement et être capable de répondre à l'événement par javascript. J'ai trouvé un lien qui en parle here. Il me montre comment créer les interfaces mais je ne suis pas sûr de savoir comment tirer l'événement de mon contrôle?Utilisation d'événements dans les contrôles de formulaire Windows hébergés sur IE

Voici mon code snippets:

//Control Code: 
public class CardReader : Panel,ICardReaderEvents, ICardReaderProperties 
{ 
    public void Error() 
    { 
    } 
    public void Success() 
    { 
    } 
} 

//Interface for events 
[Guid("DD0C202B-12B4-4457-9FC6-05F88A6E8BC5")] 
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
public interface ICardReaderEvents 
{ 
    [DispId(0x60020000)] 
    void Error(); 

    [DispId(0x60020001)] 
    void Success(); 
} 

//Interface for public properties/methods 
public interface ICardReaderProperties 
{ 
    ... 
} 

//JavaScript to handle events 
<SCRIPT FOR="CardReader1" EVENT="Error"> 
    window.status = "Error..."; 
</SCRIPT> 

<SCRIPT FOR="CardReader1" EVENT="Success"> 
    window.alert("Success"); 
    window.status = ""; 
</SCRIPT> 

Répondre

1

Vous implémentez mal dans votre classe CardReader:

public event Error; 
public event Success; 

protected void OnError() 
{ 
    if(Error != null) 
     Error(); 
} 

protected void OnSuccess() 
{ 
    if(Success != null) 
     Success(); 
} 

Si vos ICardReaderEvents changements d'interface que l'erreur et le succès prennent des paramètres, puis les appeler dans OnError et OnSuccess.

+0

Merci. Alors, quand le gestionnaire d'événements est-il défini? J'ai vérifié dans l'événement de chargement du contrôle d'utilisateur et le eventhandler est toujours null, donc je n'ai pas obtenu quelque chose raccordé juste, ou il n'a pas encore été réglé. – Jeremy

+0

Voir ma prochaine réponse –

0

Alors, maintenant vous avez besoin de savoir comment l'accrocher dans le Javascript? Voici comment je sais comment le faire:

<object id="CR" ...></object> 

<script type="text/javascript"> 
    function CR::Error() 
    { 
    alert("Error!"); 
    } 

    function CR::Success() 
    { 
    alert("Success"); 
    } 
</script> 
+0

Merci pour toute l'aide. Je reçois un objet CR non défini. – Jeremy

+0

Votre ID d'objet est-il défini sur CR? L'objet est-il chargé de manière appropriée? J'ai eu une faute de frappe ... il devrait lire CR :: Success(), pas CR: Success(). L'éditer maintenant. –