Событие загрузки дочерней формы MDi не запускается?

У меня есть простая форма, которая вызывает внешний класс, содержащий другую форму в приложении vb.NET.

Две формы настроены как родительский и дочерний MDi.

Кто-нибудь знает, почему, когда я вызываю MDIChild.show () в коде родительского элемента, событие загрузки не срабатывает в дочерней форме ??

Родительский код:

 Dim ce As New Policies.Main
    ce.MdiParent = Me
    ce.Show()

Дочерний код

Public Sub Main_Load(sender As Object, e As System.EventArgs) Handles MyBase.Load
'Do some stuff in load event
End Sub

person Lord Nodral III    schedule 26.06.2015    source источник
comment
Предполагая, что policy является именем вашей формы, вы просто попробовали Dim ce as New Policies (без .main) и, конечно же, убедились, что у политик есть правильный конструктор.   -  person Dom Sinclair    schedule 26.06.2015
comment
Мне нужно затемнить как Policies.Main, так как это один из классов с Policies. Что вы имеете в виду "Правильный конструктор"   -  person Lord Nodral III    schedule 26.06.2015
comment
Main вполне может быть одним из классов в политиках, которые вы хотите использовать, но если у вас нет фактического экземпляра New политик, вы никогда не получите доступа к main.   -  person Dom Sinclair    schedule 26.06.2015
comment
Main загружается и появляется в контейнере, поэтому я знаю, что эта часть работает правильно. Однако он никогда не обращается к событию загрузки. Все остальные функции работают.   -  person Lord Nodral III    schedule 26.06.2015
comment
Я здесь запутался ... Политика - это имя формы, которую вы пытаетесь загрузить в детстве, или это основная? Вы должны четко понимать, кто является вашим родителем и ребенком. Но для аргументов это звучит так, как будто вам нужно что-то подобное в родительской форме. Dim ce as New child, ce.show (). Если дочерний элемент имеет событие загрузки, определенное в его коде, которое должно вызываться автоматически, когда оно отображается, но вы должны сначала создать экземпляр дочернего элемента.   -  person Dom Sinclair    schedule 26.06.2015
comment
Вам придется принять мое объяснение здесь, поскольку я не уверен на 100% в терминологии для каждого раздела. Политики - это решение VS, содержащее несколько отдельных классов, одним из которых является главный. Так что я делаю Dim ce New Policies.Main. ce.MdiParent = Я. ce.show (). Это работает во многих местах в наших системах, и я не понимаю, почему этот не работает.   -  person Lord Nodral III    schedule 26.06.2015


Ответы (1)


Право, следуя комментариям выше. Откройте визуальную студию и создайте простой проект Winforms. Он будет создан с экземпляром по умолчанию Form1.

В обозревателе решений щелкните решение правой кнопкой мыши и выберите «Добавить», а в появившемся меню выберите «Форма Windows». Будет создана новая форма Windows с именем по умолчанию Form2.

Мы собираемся рассматривать форму 1 как наш родительский класс и форму 2 как наш дочерний.

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

Добавьте следующий код:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.IsMdiContainer = True  'we need this so that Form1 can act as a container for other forms
        Dim frm As New Form2
        With frm
            .MdiParent = Me
            .Show()
        End With

    End Sub

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

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        MessageBox.Show("Hi, I'm being shown from the load event of form2")
    End Sub

После этого нажмите f5, чтобы запустить этот очень простой (и грубый) пример. Form1 загрузится. когда вы нажимаете кнопку, создается новый экземпляр Form2. Перед отображением формы запускается событие загрузки, которое запускает окно сообщения для отображения этого сообщения. Вам не нужно вызывать метод загрузки напрямую.

person Dom Sinclair    schedule 26.06.2015
comment
Я использовал этот принцип в своем существующем коде, и окно сообщения никогда не появляется, указывая, что событие загрузки дочернего элемента никогда не запускается - person Lord Nodral III; 26.06.2015
comment
Можете ли вы на самом деле добавить полный код вашего родителя и ребенка, которого вы пытаетесь вызвать, для редактирования вашего вопроса. Это могло бы значительно помочь в попытке выяснить, что не работает. - person Dom Sinclair; 26.06.2015
comment
Я удалил все ссылки в родительском элементе и прочитал их все, и теперь, похоже, он работает, как ожидалось. Все очень странно. В любом случае спасибо за вашу помощь - person Lord Nodral III; 26.06.2015