martes, 25 de enero de 2011

Usar PerformClick o llamar al evento Click

En .NET hay varias formas de ejecutar el código que se encuentra dentro del evento Click de un objeto, como por ejemplo, llamar directamente a dicho evento con la instrucción

objeto_Click(objeto, New MouseEventArgs(Left, 1, 1, 1, 0))

o bien utilizando PerformClick

objeto.PerformClick

A simple vista parece más comodo llamar a PerformClick ya que no hay que pasarle parámetros adicionales pero hay que tener en cuenta que no realizan exactamente la misma función. PerformClick realiza un click real sobre el objeto mientras que objeto_Click se limita a ejecutar el código definido en el evento sin importar el estado del objeto, es decir, si el objeto no está visible o está desactivado la llamada a PerformClick no hará nada (no ejecutará ningún código) mientras que objeto_Click si ejecutaría el código.

Esto es algo a tener en cuenta sobre todo cuando activamos y desactivamos los controles en tiempo de ejecución dependiendo de los valores seleccionados o cuando los controles se "tapan" unos a otros, por ejemplo, al hacer uso de pestañas lo que hace que nuestro objeto no siempre este visible. En estos casos podría estar justificado el uso de la llamada directa al evento e incluso podríamos simplificar dicha llamada si nuestro código no hace uso del sender ni del parámetro e pasandoles el valor nothing, es decir, objeto_Click(nothing, nothing) pero, aún así, no me parece una solución "elegante".

Tal vez la mejor opción sería crear una función o un procedimiento con el código que queremos ejecutar y hacer la llamada correspondiente desde el evento click o desde cualquier otra parte del código y así evitamos tener que "simular" el click sobre el objeto. Creo que de esta forma la aplicación es algo más estable ya que controlamos en todo momento su funcionamiento y no depende del estado de los objetos.

8 comentarios:

  1. Mi comentario de hoy, fossie, tiene forma de pregunta: ¿De qué estamos hablando? Me temo que controláis mil veces más que yo estos temas, y muchos otros y, claro, esto me pasa, que me quedo a cuadros.

    ResponderEliminar
  2. Hola Clementine, no te preocupes por no saber de que estoy hablando. Este tipo de post es los típicos post que los pongo más para acordarme yo que para otra cosa aunque también intento que pueda servir de ayuda a aquellos que hayan tenido el mismo problema.

    Se trata de programación. Visual Basic .NET es un lenguaje de programación que llevo usando ya algún tiempo y que, como cualquier otro tipo de lenguajes, tiene sus particularidades y esta es una de ellas.

    Nadie nace sabiendo ni nadie puede saber de todo pero para aquellas personas que hayan usado .NET si sabrán, poco más o menos, de lo que estoy hablando. Para el resto de gente pues es un post que no tiene mucho de particular aunque quien sabe, tal vez un día te de por el mundo de la programación y vuelvas a leer este post con otros ojos ;)

    Saludos Clementine

    Ah!, como ves, Gustavo tampoco ha dejado ningún comentario ;)

    ResponderEliminar
  3. Vale, me quedo más tranquila, sobre todo con eso de que tampoco ha dejado comentario Gustavo.
    Y sí, quién sabe, quizá un día rebusque esta entrada porque ya sepa de lo que estás hablando en ella.
    Saludos, fossie.

    ResponderEliminar
  4. Y que voy a decir yo aquí si Fossie sabe que voy por otros lugares?...

    Un abrazo a los dos! En especial a Clementine que me hace pasar muy buenos ratos con tanta información aportada en las películas. Tengo la mala suerte de que no he sido todo lo cinéfilo que me gustaría y ahora mismo mi situación personal me deja poco tiempo para algo que se salga de la rutina pero vivo las películas (sin verlas con los post!)

    ResponderEliminar
  5. Mil Gracias Fossie por la explicacion..

    Saludos

    ResponderEliminar
    Respuestas
    1. Gracias a ti Sergio por dejarte caer por aquí.

      Eliminar
  6. Increíble!! Gracias Fussie! Aunque ya van a pasar casi 3 años todavía es útil el post. Estaba teniendo problemas intermitentes con el uso del PerformClick y ahora entiendo por que. Muchísimas gracias.

    Mario.

    ResponderEliminar
    Respuestas
    1. Gracias a ti por comentar Anónimo. Yo también me he vuelto loco varias veces con estas cosas por eso decidí escribir el post, para poder utilizarlo de chuleta y que no se me olvidase más.

      .NET parece caprichoso algunas veces pero todo tiene su razón de ser aunque nos cueste verla.

      Saludos y feliz año!

      Eliminar