Awesomium WebControl在Winform中启用控制的麻烦c#

时间:2011-11-26 19:18:46

标签: c# winforms properties web-controls awesomium

我会在Winform Application c#中使用这个浏览器框架。

我刚看到文档HERE

所以我会使用这个Method

我只是创建一个新类和一个新的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"); 

1 个答案:

答案 0 :(得分: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");
    }
}