2015-06-26 3 views
0

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

2 формы установлены как родительский и дочерний 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 
+0

Предполагая, что политики - это имя вашей формы, вы просто попробовали Dim ce как новые политики (без .main) и, конечно же, гарантировали, что политики имеют правильный конструктор. –

+0

Мне нужно тускнеть как Политики. Обычно, поскольку это один из классов witih Policies. Что вы имеете в виду «Правильный конструктор» –

+0

Главная может быть одним из классов в политиках, которые вы хотите использовать, но если у вас нет фактического нового экземпляра политик, вы никогда не получите доступ к основному. –

ответ

1

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

В редакторе решений щелкните правой кнопкой мыши по решению и выберите добавить и из появившегося меню выберите форму 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. Перед показанной формой его событие загрузки запускается и запускает поле сообщения te для отображения его сообщения. Вам не нужно напрямую обращаться к методу загрузки.

+0

Я использовал этот принцип в своем существующем коде, и окно сообщения никогда не появляется, указывая, что событие загрузки дочернего элемента никогда не запускается. –

+0

Можете ли вы на самом деле добавить полный код своего родителя и ребенка, которого вы пытаетесь вызвать как редактирование на ваш вопрос. Это значительно помогло бы выяснить, что не работает. –

+0

Я удалил все ссылки в родительском объекте и прочитал их все, и теперь он работает как ожидалось. Все очень странно. Спасибо за вашу помощь в любом случае –