example - ¿Cómo disparo un evento en el código VB.NET?
raiseevent visual basic (4)
Tengo un formulario que tiene un botón de inicio (para permitir a los usuarios ejecutar los procesos una y otra vez si así lo desean) y deseo enviar un evento btnStart.Click
cuando se carga el formulario, para que los procesos se inicien automáticamente.
Tengo la siguiente función para el evento btnStart.Click
, pero ¿cómo le digo a Visual Basic ''Pretender que alguien ha hecho clic en el botón y desencadenar este evento''?
Intenté ir muy simple, lo que esencialmente funciona. Sin embargo, Visual Studio me da una advertencia. Variable ''sender'' is used before it has been assigned a value
, por lo que supongo que esta no es realmente la manera de hacerlo:
Dim sender As Object
btnStart_Click(sender, New EventArgs())
También he intentado usar RaiseEvent btnStart.Click
, pero eso da el siguiente error:
''btnStart'' no es un evento de ''MyProject.MyFormClass
Código
Imports System.ComponentModel
Partial Public Class frmProgress
Private bw As BackgroundWorker = New BackgroundWorker
Public Sub New()
InitializeComponent()
'' Set up the BackgroundWorker
bw.WorkerReportsProgress = True
bw.WorkerSupportsCancellation = True
AddHandler bw.DoWork, AddressOf bw_DoWork
AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged
AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted
'' Fire the ''btnStart.click'' event when the form loads
Dim sender As Object
btnStart_Click(sender, New EventArgs())
End Sub
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
If Not bw.IsBusy = True Then
'' Enable the ''More >>'' button on the form, as there will now be details for users to view
Me.btnMore.Enabled = True
'' Update the form control settings so that they correctly formatted when the processing starts
set_form_on_start()
bw.RunWorkerAsync()
End If
End Sub
'' Other functions exist here
End Class
Los pasos para participar en la organización de un evento son los siguientes,
Public Event ForceManualStep As EventHandler
RaiseEvent ForceManualStep(Me, EventArgs.Empty)
AddHandler ForceManualStep, AddressOf ManualStepCompletion
Private Sub ManualStepCompletion(sender As Object, e As EventArgs)
End Sub
Entonces en tu caso, debería ser como a continuación,
btnStart_Click(btnStart, EventArgs.Empty)
Solo llama
btnStart.PerformClick()
Debe enviar un botón como sender
al controlador de eventos:
btnStart_Click(btnStart, New EventArgs())
Estás tratando de implementar una mala idea. En realidad, debe hacer una subrutina para realizar este tipo de tareas.
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
call SeparateSubroutine()
End Sub
private sub SeparateSubroutine()
''Your code here.
End Sub
Y luego, donde quiera que llame al btnStart''s click event
, simplemente llame a SeparateSubroutine
. Esta debería ser una forma correcta en su caso.