web-dev-qa-db-ja.com

mshtmlを使用しても機能しない

私はc#アプリを持っていて、いくつかのmshtml要素を使用してみました。しかし、私には問題があります。 using mshtml;名前空間でエラーが発生するVisual Studio 2012です。

これが私のソースコードです、

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

しかし、htmlelementの関数であるIHTMLElementCollectionは使用できません。コンパイラーがエラーを出します。

エラー1タイプまたは名前空間名 'mshtml'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

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

usingディレクティブまたはアセンブリ参照がありませんか?

エラー2タイプまたは名前空間名 'IHTMLFormElement'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

エラー3タイプまたは名前空間名 'IHTMLElementCollection'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

エラー4タイプまたは名前空間名「HTMLDocument」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

18
kks21199

Solution ExplorerのプロジェクトでReferencesを右クリックします。次にAdd Reference...をクリックします。 Assembliesに「HTML」と入力すると、Microsoft.mshtmlが表示されます。これをプロジェクトに追加すると、HTMLDocumentを使用できます。幸運を

37

Microsoft.mshtmlはReference ManagerのCOMタブにあり、「Microsoft HTML Object Library」という名前です。

19
Niko

必要な名前空間がmshtmlからMSHTMLに切り替わるという問題が何度か発生したことを付け加えておきます。したがって、参照を追加してすべてが問題なく見えても、更新されたライブラリが原因で名前空間が変更されていないか確認してください。

0
SomeCoder