web-dev-qa-db-fra.com

L'utilisation de mshtml ne fonctionne pas

J'ai une application c # et j'ai essayé d'utiliser certains éléments mshtml. Mais j'ai un problème. Le using mshtml; l'espace de noms me donne une erreur est Visual Studio 2012.

Voici mon code source,

namespace Tagger
{

    using mshtml;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Runtime.CompilerServices;
    using System.Text;

    public class HTMLForm
    {
        private string _action = "";
        private string _method = "";
        public Hashtable Inputs = new Hashtable();

        public HTMLForm(IHTMLFormElement element)
        {
            this._method = element.method;
            this._action = element.action;
            foreach (IHTMLInputElement element2 in (IHTMLElementCollection) element.tags("input"))
            {
                try
                {
                    string name = element2.name;
                    string str2 = element2.value;
                    if (name == null)
                    {
                        name = element2.type;
                    }
                    this.Inputs.Add(name, str2);
                }
                catch
                {
                }
            }
        }

        public static HTMLForm[] GetAllForms(string html)
        {
            List<HTMLForm> list = new List<HTMLForm>();
            HTMLDocument document = (HTMLDocument) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("25336920-03F9-11CF-8FD0-00AA00686F13")));
            document.write(new object[] { html });
            document.close();
            foreach (IHTMLFormElement element in document.forms)
            {
                list.Add(new HTMLForm(element));
            }
            return list.ToArray();
        }

        public static HTMLForm GetFormByAction(string html, string action)
        {
            foreach (HTMLForm form in GetAllForms(html))
            {
                if (form.Action.ToLower() == action.ToLower())
                {
                    return form;
                }
            }
            return null;
        }

        public string ToPostData()
        {
            StringBuilder builder = new StringBuilder();
            foreach (string str in this.Inputs.Keys)
            {
                object obj2 = this.Inputs[str];
                string str2 = (obj2 == null) ? "" : obj2.ToString();
                builder.AppendFormat("{0}={1}&", HTTPBase.encode(str), HTTPBase.encode(str2));
            }
            if (builder.Length > 1)
            {
                return builder.ToString().Substring(0, builder.Length - 1);
            }
            return "";
        }

        public string Action
        {
            get
            {
                return this._action;
            }
            set
            {
                this._action = value;
            }
        }

        public string Method
        {
            get
            {
                return this._method;
            }
            set
            {
                this._method = value;
            }
        }        
    }
}

Mais je ne peux pas utiliser les fonctions de htmlelement, IHTMLElementCollection. Le compilateur me donne une erreur.

Erreur 1 Le type ou le nom d'espace de nom 'mshtml' est introuvable (manque-t-il une directive using ou une référence d'assembly?)

Error 5   The type or namespace name 'HTMLDocument' could not be found (are 

vous manque une directive d'utilisation ou une référence d'assemblage?

Erreur 2 Le type ou le nom d'espace de nom 'IHTMLFormElement' est introuvable (manque-t-il une directive using ou une référence d'assembly?)

Erreur 3 Le type ou le nom d'espace de noms 'IHTMLElementCollection' est introuvable (manque-t-il une directive using ou une référence d'assembly?)

Erreur 4 Le type ou le nom d'espace de nom 'HTMLDocument' est introuvable (manque-t-il une directive using ou une référence d'assembly?)

18
kks21199

Faites un clic droit sur References dans votre projet dans Solution Explorer. Puis clique Add Reference.... Dans Assemblies tapez dans la recherche 'HTML' et vous verrez Microsoft.mshtml. Ajoutez ceci à votre projet et vous pourriez utiliser HTMLDocument. Bonne chance

37
Boris Parfenenkov

Microsoft.mshtml est dans l'onglet COM dans le Gestionnaire de référence et il est nommé "Bibliothèque d'objets HTML Microsoft".

19
Niko

Je veux ajouter que nous avons eu plusieurs fois le problème, que l'espace de noms nécessaire est passé de mshtml à MSHTML et vice-versa. Donc, même si vous avez ajouté la référence et que tout semble bien, vérifiez si l'espace de noms a changé en raison d'une bibliothèque mise à jour.

0
SomeCoder