1

このブラウザ フレームワークを Winform アプリケーション c# で使用します。

ここでドキュメントを見ました

だから私はこのメソッドを使用します

新しいクラスと新しい Awesomium.Windows.Forms.WebControl オブジェクトを作成するだけです。

今、私が特別な方法なしでそれを使用すると(オブジェクトを作成し、URLソースをロードするためのものだけが機能します。しかし、私がこの方法を使用したいとき:

browser.SetHeaderDefinition("MyHeader", myCol); //myCol is a NameValueCollection 

私はこのエラーを受け取りますThe control is disabled either manually or it has been destroyed.

リンクした最初のページには次のように書かれています:


通常の意味に加えて、Enabled プロパティは WebControl で特別な意味を持ちます。これは、基になるビューが有効で有効かどうかも示します。

WebControl は、(Close() または Shutdown() の呼び出しによって) 破棄された場合、または適切にインスタンス化されなかった場合、無効と見なされます。

Enabled プロパティを手動で true に設定すると、コントロールが一時的に無効になります。…………

(ビューが破棄されているか、このプロパティを手動で設定したために) 無効になっているときに、このコントロールのメンバーにアクセスしようとすると、InvalidOperationException が発生する場合があります (各メンバーのドキュメントを参照してください)。

今私はENABLED プロパティで遊んでみましたが、それでもこのエラーが発生します。この問題を解決するにはどうすればよいですか? 私は本当に理解していませんでした。

   Awesomium.Windows.Forms.WebControl browser = 
                                        new Awesomium.Windows.Forms.WebControl();
                    this.SuspendLayout();
        browser.Location = new System.Drawing.Point(1, 12);
       browser.Name = "webControl1";
       browser.Size = new System.Drawing.Size(624, 442);
     browser.Source = new System.Uri("http://www.google.it", System.UriKind.Absolute);
                    browser.TabIndex = 0;
**** This below is the code that i cant use cause i get the error control
// System.Collections.Specialized.NameValueCollection myCol = 
// new System.Collections.Specialized.NameValueCollection();
//            myCol.Add("Referer", "http://www.yahoo.com");
//            browser.SetHeaderDefinition("MyHeader", myCol);
//            browser.AddHeaderRewriteRule("http://*", "MyHeader"); 
4

1 に答える 1

2

問題は、コントロールの作成が完了するまでヘッダー定義を設定できないことです。コントロールの準備が整うまで、ヘッダー定義を設定するときに遅延する必要があります。私はWinformsの専門家ではないので、コントロールがライフサイクルのどこにあるかを判断するために使用するより良いイベントがあるかもしれませんが、ここでは、コントロールのPaintイベントを使用して問題のあるメソッド呼び出しを延期するだけの、投稿したものの実際の変更を示します。

public partial class Form1 : Form
{
    private Awesomium.Windows.Forms.WebControl browser;

    public Form1()
    {
        InitializeComponent();

        browser = new Awesomium.Windows.Forms.WebControl();

        //delay until control is ready
        browser.Paint += browser_Paint;

        Controls.Add(browser);

        browser.Location = new System.Drawing.Point(1, 12);
        browser.Name = "webControl1";
        browser.Size = new System.Drawing.Size(624, 442);
        browser.Source = new System.Uri("http://www.google.it", System.UriKind.Absolute);
        browser.TabIndex = 0;

    }

    void browser_Paint(object sender, PaintEventArgs e)
    {
        browser.Paint -= browser_Paint;

        System.Collections.Specialized.NameValueCollection myCol =
            new System.Collections.Specialized.NameValueCollection();
        myCol.Add("Referer", "http://www.yahoo.com");
        browser.SetHeaderDefinition("MyHeader", myCol);
        browser.AddHeaderRewriteRule("http://*", "MyHeader");
    }
}
于 2012-06-11T15:42:35.570 に答える