Form1_Load не запускается даже после добавления обработчика - PullRequest
2 голосов
/ 04 марта 2011

Прошло много времени с тех пор, как я баловался с C #, но у меня чертовски много времени заставляет мою form_load срабатывать. Это самая простая вещь, которую я не могу себе представить, почему она не сработает! Любая помощь будет оценена.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AppName_v4._0___TestRoom_Addon{
    public partial class Form1 : Form{

        public Form1() {
            InitializeComponent();
            this.Load += new EventHandler(this.Form1_Load); //FIRES!
        }

        private void Form1_Load(object sender, EventArgs e) {
            webKitBrowser1.Dock = DockStyle.Fill; //DOES NOT FIRE!
            webKitBrowser1.Navigate("http://192.168.0.10/?zoneid=11");
        }

    }
}

UPDATE

  • Я использовал точки останова, чтобы убедиться, что строка не его
  • Форма показывает Screenshot of resulting Form

Я также попробовал следующее безуспешно ...

namespace AlphaEntry_v4._0___MailRoom_Addon{
    public partial class Form1 : Form{

        public Form1() {
            InitializeComponent();

        }

        protected override void OnLoad(EventArgs e)
        {
            webKitBrowser1.Dock = DockStyle.Fill;
            webKitBrowser1.Navigate("http://192.168.0.10/?zoneid=11");

            base.OnLoad(e);
        }


    }
}

ОБНОВЛЕНИЕ # 2 Мне удалось заставить это работать, удалив и повторно добавив ссылки на элемент управления WebKit. Не уверен, что случилось. Спасибо всем.

Ответы [ 8 ]

8 голосов
/ 09 ноября 2015

Я только что решил ту же проблему. Основной причиной должно быть то, что событие Form1_Load не было запущено во время загрузки Form1. Просто откройте форму Form1 в представлении конструктора, щелкните заголовок формы Form1, щелкните тег «Event» под свойством Form1, найдите «Load» в списке свойств, справа от него вы найдете список событий. Выберите «Form1_Load», перестройте его. Вы можете проверить, выбрав любое событие, кроме Form1_Load, чтобы проверить, вызывается ли Form1_Load () или нет.

4 голосов
/ 04 марта 2011

Вот обходной путь:

Введите свой код сразу после InitializeComponent();.
После этого вызова закрытые поля формы инициализируются, и вы можете взаимодействовать с объектами пользовательского интерфейса.

Я знаю, что это не дает прямого ответа на вопрос, но в большинстве случаев должно работать.

4 голосов
/ 04 марта 2011

В целом, гораздо более удобной процедурой является обработка переопределенных виртуальных методов для внутренних событий, а не регистрация для инициированного события.

protected override void OnLoad(EventArgs e)
{
  // Your code here

  base.OnLoad(e);
}

Было бы интересно, если бы это не вызывалось.

3 голосов
/ 04 марта 2011

Мне удалось заставить это работать, удалив и повторно добавив ссылки на элемент управления WebKit. Не уверен, что случилось, но комментарий John Arlen направил меня в правильном направлении. Спасибо всем.

3 голосов
/ 04 марта 2011

Это самая простая вещь, которую я могу себе представить, почему она не сработает!

Я подозреваю, что проблема не в том, что она "не срабатывает", а в том, чторассматриваемый код не обрабатывает вещи так, как вы подозреваете.

Попробуйте установить точку останова в строке "*.Dock".Учитывая приведенный выше код, его нужно нажать, как только вы покажете эту форму.Однако, поскольку это событие Form.Load, этого не произойдет, пока экземпляр формы не отобразится через form.Show().

2 голосов
/ 10 января 2017

Я пришел сюда для точно такой же проблемы.Как только я увидел обновление:

, я смог добиться этого, удалив и повторно добавив ссылки на элемент управления WebKit.Не уверен, что случилось.Спасибо всем.

Я понял, что случилось в моем случае.Как и Скотт, я некоторое время не делал никакого c # и забыл ключевую деталь.

Я хотел, чтобы какой-то простой пример кода проверял, работает ли listview так, как мне было нужно.Лучшая документация - рабочий код, поэтому я скопировал образец из https://www.dotnetperls.com/listview.Запустил VS2010 и вставил код в форму, сгенерированную для меня программой Visual Studio.Запустил его и получил точно то же, что сделал Скотт - пустую форму с пустым списком.

Причина в том, что в Visual Studio, когда вы добавляете элемент управления в форму, вы автоматически не получаете все обработчики событий - form_load является одним из отсутствующих обработчиков.Вы получаете код для рисования элемента управления и все.Чтобы сообщить Windows, что у вас есть обработчик для события загрузки формы, вы должны добавить

this.Load + = new System.EventHandler (this.Form1_Load);

к коду в InitializeComponent для формы.Эта строка отсутствовала, когда я добавил элемент управления в форму, чтобы не вызывать мой обработчик.

Вы можете добавить строку вручную или перейти в окно дизайна в Visual Studio и щелкнуть пустую частьформа.Вы увидите новую пустую заглушку, сгенерированную автоматически:1029 *

Подчеркивание-1 привязано к имени, потому что у меня уже была неработающая подпрограмма Form1_Load.

Если вы затем проверите код form1.designer.cs, вы увидите это.load + = .... строка была добавлена ​​в код инициализации.

Иногда простой пример кода не так прост.

0 голосов
/ 04 мая 2017

Столкнулся с этим сегодня, сначала озадачивая. После прочтения этой и других предложенных резолюций моя тайна была открыта.

Первое: как я быстро определил свою проблему - я переместил регистрацию события this.Load вверх в качестве первой строки InitializeComponent () в сгенерированном дизайнером коде. Тогда моя точка останова была достигнута. Затем я включил «перерыв» для всех брошенных исключений, в том числе и родных. Это привело меня прямо к проблеме.

В моем случае включение веб-элемента управления привело к тому, что загрузка произошла в удивительно ранний момент, сразу после сборки; где, поскольку мой код был написан с предположением, что загрузка произойдет, когда страница, наконец, будет активирована в пользовательском интерфейсе. Он зависел от переменной состояния, которая еще не была установлена.

Другие проблемы, такие как отсутствие зависимой загруженной с задержкой DLL, исключение в вышестоящем обработчике загрузки и т. Д., Можно отследить таким образом.

После исправления я переместил this.Load () обратно в исходное местоположение.

0 голосов
/ 05 июля 2015

Другой причиной, по которой он не срабатывает, является то, что вы используете DataBindings и у вас возникают ошибки, поскольку вы изменили имена свойств или удалили свойства.

...