2015-07-27 2 views
2

У меня есть сценарий, в котором я должен реализовать UserControl, нажав кнопку «Процесс», на котором работает фоновый рабочий стол.Добавление обработчика событий в пользовательский контроль VB.NET

Я хочу вызвать функцию/метод моей родительской формы, где я собираюсь добавить этот UserControl на событие «RunWorkerCompleted».

Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click 
    Try    
     bgwFetchGiftCard.RunWorkerAsync() 
    Catch ex As Exception 
     WriteLog(ex) 
    End Try 
End Sub 

Private Sub bgwFetchCard_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwFetchCard.DoWork 
    Try 
     ds = New DataSet() 
     'Call ApI Service for Denomination 
     ds = APICALL() 
    Catch ex As Exception 
     WriteLog(ex) 
    End Try 
End Sub 

Private Sub bgwFetchCard_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgwFetchCard.RunWorkerCompleted 
    If ds IsNot Nothing Then 
     Result = True 
     'At This Point I Want To Raise Event   
     'RaiseEvent 
    Else 
     'ShowMessage("FAIL") 
    End If 
End Sub 

Как может я достигнуть этого? Кто-нибудь любезно предложить

+1

Добавить 'Public Event' объявление в свой код, поднять этот. Скрытие рабочих потоков в пользовательском управлении - не фантастическая идея. Вам нужно подумать о том, что произойдет, когда пользователь закроет форму, на которой работает этот элемент управления, и рабочий все еще работает. Вы не можете [использовать это] (http://stackoverflow.com/a/1732361/17034). –

ответ

2

Предполагая, код изображенный находится в UserControl, вам просто нужно объявить событие и поднять его (там нет ничего особенного в этом отношении в UserControl) :

Public Event SomethingIsDone (sender As Object, e as EventArgs) 

... 
Private Sub bgwFetchCard_RunWorkerCompleted(sender As Object, 
      e As RunWorkerCompletedEventArgs) Handles bgwFetchCard.RunWorkerCompleted 
    If ds IsNot Nothing Then 
     Result = True 

     RaiseEvent SomethingIsDone(Me, New EventsArgs()) 

    Else 
     'ShowMessage("FAIL") 
    End If 
End Sub 

в тех случаях, когда нужно передать информацию в случае, определить пользовательский EventArgs класс, который наследуется от EventArgs добавить свойства, нужно:

Затем передать экземпляр этого класса, а не родовым EventArgs:

... 
RaiseEvent SomethingIsDone(Me, 
      New SomethingDoneEventArgs("foo")) 
+0

И реализация в родительской форме? – DareDevil

Смежные вопросы