Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial se muestra cómo declarar y generar eventos para una clase denominada Widget. Después de completar los pasos, es posible que desee leer el tema complementario Tutorial: Controlar eventos, que muestra cómo usar eventos de Widget objetos para proporcionar información de estado en una aplicación.
La clase widget
Imagine en este momento que tiene una clase Widget. La Widget clase tiene un método que puede tardar mucho tiempo en ejecutarse y quiere que la aplicación pueda poner algún tipo de indicador de finalización.
Por supuesto, podría hacer que el objeto Widget mostrara un cuadro de diálogo de porcentaje completado, pero después tendría que aguantar ese cuadro de diálogo en cada proyecto en el que usara la clase Widget. Un buen principio de diseño de objetos es permitir que la aplicación que usa un objeto controle la interfaz de usuario, a menos que todo el propósito del objeto sea administrar un formulario o cuadro de diálogo.
El propósito de Widget es realizar otras tareas, por lo que es mejor agregar un PercentDone evento y dejar que el procedimiento que llama a los métodos de las llamadas Widgetcontrole ese evento y muestre las actualizaciones de estado. El PercentDone evento también puede proporcionar un mecanismo para cancelar la tarea.
Para compilar el ejemplo de código para este tema
Abra un nuevo proyecto de aplicación windows de Visual Basic y cree un formulario denominado
Form1.Agregue dos botones y una etiqueta a
Form1.Asigne un nombre a los objetos como se muestra en la tabla siguiente.
Objeto Propiedad Configuración Button1TextIniciar tarea Button2TextCancelar Label(Name),TextlblPercentDone, 0 En el menú Proyecto , elija Agregar clase para agregar una clase denominada
Widget.vbal proyecto.
Para declarar un evento para la clase Widget
Use la
Eventpalabra clave para declarar un evento en laWidgetclase . Tenga en cuenta que un evento puede tenerByValyByRefargumentos, como demuestra el eventoWidgetdePercentDone.Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Cuando el objeto que realiza la llamada recibe un PercentDone evento, el Percent argumento contiene el porcentaje de la tarea que se ha completado. El Cancel argumento se puede establecer en True para cancelar el método que generó el evento.
Nota:
Puede declarar argumentos de evento igual que argumentos de procedimientos, con las siguientes excepciones: Los eventos no pueden tener Optional argumentos o ParamArray y los eventos no tienen valores devueltos.
El PercentDone evento se genera mediante el LongTask método de la Widget clase .
LongTask toma dos argumentos: el período de tiempo que el método pretende trabajar y el intervalo de tiempo mínimo antes de que LongTask pause para generar el evento PercentDone.
Para generar el evento PercentDone
Para simplificar el acceso a la
Timerpropiedad usada por esta clase, agregue unaImportsinstrucción a la parte superior de la sección de declaraciones del módulo de clase, encima de laClass Widgetinstrucción .Imports Microsoft.VisualBasic.DateAndTimeAgregue el siguiente código a la clase
Widget:Public Sub LongTask(ByVal Duration As Single, ByVal MinimumInterval As Single) Dim Threshold As Single Dim Start As Single Dim blnCancel As Boolean ' The Timer property of the DateAndTime object returns the seconds ' and milliseconds that have passed since midnight. Start = CSng(Timer) Threshold = MinimumInterval Do While CSng(Timer) < (Start + Duration) ' In a real application, some unit of work would ' be done here each time through the loop. If CSng(Timer) > (Start + Threshold) Then RaiseEvent PercentDone( Threshold / Duration, blnCancel) ' Check to see if the operation was canceled. If blnCancel Then Exit Sub Threshold = Threshold + MinimumInterval End If Loop End Sub
Cuando la aplicación llama al LongTask método , la Widget clase genera el PercentDone evento cada MinimumInterval segundos. Cuando el evento vuelve, LongTask comprueba si el argumento Cancel se estableció en True.
Aquí se necesitan algunos avisos de declinación de responsabilidades. Por motivos de simplicidad, el LongTask procedimiento supone que sabe con antelación cuánto tardará la tarea. Esto casi nunca es el caso. Dividir las tareas en fragmentos de tamaño par puede ser difícil y, a menudo, lo que más importa a los usuarios es simplemente la cantidad de tiempo que pasa antes de obtener una indicación de que algo está sucediendo.
Es posible que haya detectado otro error en este ejemplo. La Timer propiedad devuelve el número de segundos que han pasado desde la medianoche; por lo tanto, la aplicación se bloquea si se inicia justo antes de medianoche. Un enfoque más cuidadoso para medir el tiempo tomaría en consideración las condiciones de límite, como esta, o evitarlas por completo, mediante propiedades como Now.
Ahora que la Widget clase puede generar eventos, puede pasar al siguiente tutorial.
Tutorial: Controlar eventos muestra cómo usar WithEvents para asociar un controlador de eventos al PercentDone evento.