¿Cómo asignar eventos a varios objetos creados en tiempo de ejecución?
Creería que el título ya es suficientemente claro para quienes tengan la solución a mi problema. Pero por las dudas quiero explicarla, ya que si alguno tiene alguna duda con el título que puse, con esto entenderán perfectamente. También me gustaría compartirles una solución que se me ocurrió para resolver un problema que tal vez a ustedes también les sirva algún día, que desemboca en este tema.
Yo necesitaba hacer un ListBox común y corriente que contiene los nombres de los empleados del trabajo y otros datos más, pero que en cada uno le correspondía una imagen que hacía referencia a un valor, una barra que representa un porcentaje (como en los gráficos de barra, pero una barra por cada empleado). Si hacía un ListBox, se complicaba mucho hacer que dicha barra aparezca al lado y que quede alineado con el desplazamiento de los valores del ListBox. Otro dato es que la cantidad de empleados es de 50 pero pueden variar muchísimo.
Así que lo que hice, fue crear una especie de "ListBox" propio, mediante un Frame (lo llamaré Frame1) que representaría el borde de un ListBox (sin valor en la propiedad Caption así aparece el recuadro nada más). Luego dentro del mismo, otro Frame (Frame2) pero este sin propiedad Caption y además sin que se vean sus bordes, es decir, que el mismo no lo ve el usuario. Y dentro del Frame1 pero fuera del Frame2, un ScrollBar.
En tiempo de ejecución, dentro del Frame2, creo Labels para toda la info necesaria por cada uno de los empleados, y a la derecha 2 imágenes para cada uno con la que represento una barra llena según un porcentaje. Le doy el alto (Height) al Frame2 en función a la cantidad de empleados cargados, y luego mediante el ScrollBar, manejo la propiedad Top del Frame2, haciendo parecer que desplazo una lista creada a mi modo.
Si bien podrían encontrar otras maneras de realizar esto mismo, en este caso lo bueno es que se puede manipular por cada empleado el espacio que se quiera, pudiendo agregar por ejemplo una foto con la imagen del empleado, etc. En cambio en un ListBox, el tamaño de los renglones están determinados por el tamaño de la letra del mismo, y no pueden agregarse otro tipo de elementos como imagenes, o controles asociados.
El problema entonces está, en cómo tengo que hacer para que al hacer doble clic en el nombre del empleado, me muestre una ficha del mismo. Sé que se puede, porque si podemos crear botones, entonces podemos asociarlos a eventos, de lo contrario no tendrían sentido.
Sepan también que a esto lo he probado como si fuera que existían 150 empleados (lo cuál crea y carga 600 labels y 300 imágenes), para ver sus tiempos de carga, y fueron rapidísimos, por ello no he intentado otra solución al problema.
Espero haber sido claro, y que les sirva de algo también para que no hayan leído tanto en vano. Sin más.