2015-08-20 4 views
0

У меня есть родительская форма, которая открывает модальную дочернюю форму. Детская форма имеет 2 кнопки - хорошо и отменить. Я хотел бы вызвать соответствующие события в родительской форме. Любые идеи, как я могу это сделать?Как обновить родительскую форму из дочерней формы в vb6?

Я думал, что должен передать родительский объект формы при вызове Show на ребенка, но он, похоже, не помогает.

Это код, который я имею в родительской форме:

answerFromChild = "NothingReceivedYet" 'it's a public property that should get updated 
             'to "Okay" when the okay button 
             'in the child form is clicked. 

Dim myChildForm2 As New ChildForm2 
myChildForm2.setVariableOne = "Test" 
myChildForm2.Show vbModal, Me 

If answerFromChild <> "Okay" Then Exit Sub 

'there is more code if it says "Okay" 

Приведенный выше код в родительском работает, но answerFromChild свойство никогда не обновляется до «Хорошо».

Это код в виде ребенка:

Private Sub Okay_Click() 
    ParentForm1.answerFromChild = "Okay" 'this works but it updates 
             'the "answerFromChild" in 
             'another instance of the ParentForm1 
    Unload Me 
End Sub 

ответ

2

Лучше дизайн должен был бы объявить Public Event на дочерней форме, что родитель добавляет обработчики. Затем вы выберете RaiseEvent в дочернем элементе, и это приведет к выполнению кода в родительском, который затем должен обновить свои собственные элементы формы.

В детстве: -

'Declare the event that will broadcast the message to whoever is listening 
Public Event SomethingImportantEvent(message As String) 

Private Sub CommandButton1_Click() 
    'Tell whoever is interested 
    RaiseEvent SomethingImportantEvent("Hello from child") 
End Sub 

В родителю: -

Dim WithEvents child As Form2 

Private Sub child_SomethingImportantEvent(message As String) 
    Debug.Print "The child said: " & message 
End Sub 

Private Sub CommandButton1_Click() 
    If child Is Nothing Then 
    set child = New Form2 
    End If 
    child.Show 
End Sub 
+0

Хорошая идея, но я получаю сообщение об ошибке 'времени выполнения '91': Переменная объекта или переменная блока не set' на 'child.Show' – Apostrofix

+0

Вы пропустили ключевое слово' New', которое я использовал в своем коде? 'Dim WithEvents child As New Form2' – joehanna

+1

@joehanna Вы не можете использовать' WithEvents' с декларацией 'New'. Для 'WithEvents' OP потребуется явно выделение. – wqw