Interface web sans winforms

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 874 fois - Téléchargée 29 fois

Contenu du snippet

Bonjour à tous.

En tant que webmaster, je me suis interressé à la réalisation de programmes en C# en utilisant uniquement un contrôle Internet Explorer (WebBrowser). En effet, de nos jours il est beaucoup plus aisé de réaliser une interface "spéciale" en HTML plutôt qu'avec des contrôles Windows. En partant de ce constat, il nous manque la méthode pour faire intéragir C# et IE. En effet, le but de la manoeuvre est de créer divers Liens HTML et d'appeler des méthodes issues du programme en C# à partir de ces liens, et aussi de pouvoir faire des appels Javascript depuis C#.

---------------------------------
INVOKE de HTML(Javascript) à C#
---------------------------------

La solution se fait en 3 étapes:
-Déclarer la classe ( celle dont les méthodes seront appelés du WebBrowser) avec l'attribue [ComVisible] à true
-Donner la valeur "this" à la propriété ObjectForScripting de l'objet WebBrowser
-Utiliser window.external.NomFonction(); pour appeler les focntions de C# via HTML.

---------------------------------
INVOKE de C# à HTML(Javascript)
---------------------------------

Une seule étape suffit !

- Utiliser la méthode InvokeScript de l'objet Document contenu dans l'objet WebBrowser
->C#

Et bien voilà, maintenant vous avez tous les outils pour réaliser des logiciels avec un minimum de WinForms.
Ce n'est pas très compliqué et ça promet !

Source / Exemple :


//---------------------------------
//INVOKE de HTML(Javascript) à C#
//---------------------------------
//->C#

using System.Runtime.InteropServices;

[ComVisible(true)]
class Form1
{
   System.Windows.Forms.WebBrowser WebBrowser1;

   Form1()
   {
        InitializeComponent();
        this.WebBrowser1.ObjectForScripting = this;
   }
   public void Test()
   {
      MessaegBox.Show("Coucou je suis C#!");
   }

}

//->HTML (Javscript)

<a href="javascript:window.external.Test();">Appel à C#</a>

//---------------------------------
//INVOKE de C# à HTML(Javascript)
//---------------------------------
//->C#

//passage de 2 arguments à la fonction coucou
Object[] objArray = new Object[1];
objArray[0] = (Object)"salut";
objArray[1] = (Object)"ça va?";
object result = WebBrowser.Document.InvokeScript("coucou")

//->JavaScript

function coucou(param1,param2)
{
	alert(param1 + param2);
   return true;
}

Conclusion :


Comme à ma grande habitude je ne mets pas les sources car tout est dans le tutorial.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
10 juin 2008

Super merci !
exactement ce que je cherchais!
Messages postés
186
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 janvier 2008

Si tu fait du VB.NET, tu peux, vu que ca repose sur le Framework.NET
Si c'est du VB6 j'ai peur qu'il ne supporte pas le COM !
Messages postés
56
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
27 mai 2008

Et'il possible de faire la meme chose en VB ?
Messages postés
186
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 janvier 2008

Pile de dont j'avait besoin, merci !

Juste un truc pour VS2005, penser à définir la classe C# associé avec [ComVisibleAttribute(true)]
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

C'est probablement le futur de la guéguère des navigateurs.
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.