2015-10-28 5 views
0

У меня есть форма (frmwizard), которую я использую для создания мастера, такого как интерфейс. Форма содержит пользовательское управление и кнопку (для тестирования). Существует также функция в форме «NextPage»VB.NET User control Referencing Form

Форма загружает usercontrol (ucpage1) при загрузке, а пользовательское управление имеет кнопку на нем, которая при нажатии пытается вызвать функцию в основной форме, как показано ниже:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    frmWizard.Nextpage(me.name) 
End Sub 

В моей функции под названием «NextPage» есть следующие для тестирования.

Public Sub NextPage(ByVal CurrentPage As String) 
    MessageBox.Show(UserControl1.Controls.Count) 
End Sub 

Когда я вызываю функцию от самой формы (с помощью кнопки) я получаю результат 1, когда я вызвать функцию через пользовательский элемент управления, я получаю результат как 0

I» Я уверен, что есть что-то простое, что мне нужно сделать, но я не уверен, что я упустил.

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

+0

После восстановления проекта, я думаю, что разработал, почему он не позволяет мне перемещаться. Если я настраиваю форму запуска как мою форму Wizard, она работает нормально, но если я запускаю свою основную форму, то она не работает. Какие-либо предложения? –

ответ

1

Codependance - плохая идея, поскольку она блокирует два типа вместе в будущем. Если ваш пользовательский элемент управления действительно должен вызывать форму, вам следует вместо этого поднять событие и обработать событие в вашей форме.

Public Class MyUserControl 
    Public Event OnNextPage(ByVal sender As Object, ByVal e As EventArgs) 

    Private Sub btnNextPage_Click(sender As Object, e As EventArgs) Handles btnNextPage.Click 
     RaiseEvent OnNextPage(Me, New EventArgs) 
    End Sub 
End Class 

Public Class Form1 
    Private Sub MyUserControl_OnNextPage(sender As Object, e As EventArgs) Handles MyUserControl1.OnNextPage ' , MyUserControl2.OnNextPage, etc... 
     MessageBox.Show(DirectCast(sender, MyUserControl).Controls.Count) 
    End Sub 
End Class 
+0

Спасибо за это. Каков наилучший способ справиться с этим? С удовольствием меняем это и учимся. Будет около 5 мастеров управления пользователя и одна форма, мне лучше использовать форму/модуль для этого? –

+0

Подумайте, как работает обычный элемент управления, например, кнопка. Он вызывает события (Clicked, MouseDown и т. Д.) Для внешнего мира, чтобы они могли использовать их по своему усмотрению. Вам просто нужно сделать то же самое, спроектировать свои пользовательские элементы управления, чтобы они были независимыми и поднять события, которые вам нужно потреблять в вашей форме. Затем просто обрабатывайте события в своей форме по мере необходимости. –