Проблема Awesomium WebControl с включенным контролем в Winform c # - PullRequest
1 голос
/ 26 ноября 2011

Я бы использовал эту Браузерную платформу в моем приложении 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"); 

1 Ответ

2 голосов
/ 11 июня 2012

Проблема в том, что вы не можете установить определение заголовка, пока не закончится создание элемента управления. Вам просто нужно отложить, когда вы устанавливаете определение заголовка, пока элемент управления не будет готов. Я не эксперт 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");
    }
}
...