Je développe un petit programme qui sous forme de formulaire Windows. Sur ce formulaire, je veux mettre un lien, et lorsque l'utilisateur clique sur le lien, un navigateur SEPérer IE sera ouvert avec les données de poste. P>
original, j'ai utilisé Et j'ai cherché sur le Web, un gars a suggéré d'utiliser "Microsoft Web Browser Control", cependant, il est nécessaire d'ajouter ce contrôle dans mon formulaire et d'afficher l'explorateur dans le formulaire, mais je veux une ouverture séparée d'ouverture. < / p>
et j'ai vu en VB il y a une méthode comme Alors, avez-vous des suggestions sur la manière de mettre en œuvre? p> system.diagnostics.process.start () code>. Cependant, je ne peux pas publier de données via ce type d'appel. P>
CreateObject ("Internetexplorer.application") code>, mais je ne peux pas trouver comment l'utiliser dans C #. P>
6 Réponses :
déposez un navigateur Web sur votre formulaire. Il devrait avoir un nom par défaut de "WebBrowser1" - vous pouvez changer cela si vous le souhaitez. Définissez la propriété "visible" sur "False". Double-cliquez sur la barre de titre du formulaire pour générer automatiquement un événement de charge dans le code.
appelez la méthode de navigation, qui a cette signature: p> comme ceci: p> Vous pouvez transmettre tout Des octets que vous voulez là-bas ... Encoding.default.getBytes () est juste un moyen rapide de passer une chaîne à travers. p> L'astuce consiste à utiliser "_blank" pour le cadre cible. p> p>
Je doute que vous puissiez dire qu'il est efficace d'intégrer un contrôle juste pour faire ce que processus.start () peut faire quand même?
C'est effectivement la meilleure réponse simple pour .NET. Plus la réponse "correcte" consiste à appeler CoCreateInstance sur le PROGID "InternetExExplorer.application", et après votre CCI, vous pouvez appeler l'interface .naviga2 et transmettre les données post. Mais cela va impliquer un tas de com / pinvoke goo que cette réponse évite parfaitement.
En réalité, vous pouvez utiliser Process.Start avec des données de chaîne de requête postées:
System.Diagnostics.Process.Start("IExplore.exe", "http://localhost/file.html?foo=bar&baz=duh");
Qui effectue un get, pas un post
Si vous faites un shellexecute avec un verbe d'ouverture sur l'URL, le navigateur Web par défaut sera généré et ouvrez le lien. Vous pouvez également invoquer Internet Explorer (à nouveau à l'aide de Shellexecute) avec l'URL ajoutée à la fin de la chaîne (la chaîne que vous utilisez pour Shellexecute ressemblerait à ceci:
System.Diagnostics.Process.Start(@"C:\Program Files\Internet Explorer\iexplore.exe", "http://www.google.com/search?q=bing");
Est-ce qu'il y a une bownvoter aléatoire qui a déployé des choses à voter sans laisser une explication?
Vous allez certainement avoir besoin d'utiliser processus.Start (ou utilisez un processeurfo) pour obtenir IE Démarger: comme ceci:
// Ouvrir à savoir à un fichier sur le bureau à la suite d'un clic sur un linklabel sur un WinForm P>
internal static string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start("IExplore.exe", desktopPath + "\\someHTMLFile.htm"); }
Par "post", il désigne la méthode postale pour soumettre des données à un serveur, dans http. Voir la section 9.5 Ici: w3.org/protocols/rfc2616/rfc2616-sec9.html . Le problème de YongMei est que la manière du processus de fonctionnement du processus.Start (URL) utilise la méthode GET (section 9.3) qui est moins sécurisée.
Vous pouvez simplement commencer à traiter en envoyant une URL dans Process.Start comme paramètre. Il y a un problème lors de l'appelant StartProcess de WebForms GUI thread en raison du contexte de synchronisation. Ma solution utilise la piscine de thread à cette fin. L'avantage de cette solution est qu'une URL est ouverte dans le navigateur Web préféré préféré par l'utilisateur strong> qui peut être c'est-à-dire, firefox, etc.
Vous pouvez également utiliser la réflexion .NET pour ouvrir un navigateur
Cet exemple vous indique comment définir des attributs spécifiques de la touche InternetExExExplorer.Application P>
Par exemple, je devrais pouvoir éteindre la barre d'adresse et définir la hauteur et la largeur. IE et une autre sécurité du navigateur ne vous permet pas d'éteindre la barre d'adresse dans les autres exemples p>
Notre site est une application MVC interne et fonctionne sans problème. P>
System.Type oType = System.Type.GetTypeFromProgID("InternetExplorer.Application"); object IE = System.Activator.CreateInstance(oType); IE.GetType().InvokeMember("menubar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 }); IE.GetType().InvokeMember("toolbar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 }); IE.GetType().InvokeMember("statusBar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 }); IE.GetType().InvokeMember("addressbar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 }); IE.GetType().InvokeMember("Visible", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { true }); IE.GetType().InvokeMember("Height", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 680 }); IE.GetType().InvokeMember("Width", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 1030 }); IE.GetType().InvokeMember("Navigate", System.Reflection.BindingFlags.InvokeMethod, null, IE, new object[] { "http://yoursite" });
Vous pouvez simplement utiliser la méthode de navigation de contrôle WebBrowser () et de le faire être complètement cachée dans votre formulaire.