none
Matriz de controles RRS feed

  • Pregunta

  • Hola

    Yo estoy haciendo un juego de ajedrez y necesito controlar cuando hago click en un control que esta definido dentro de una matriz

    Tengo una matriz de 64 controles y necesito saber cuando hago un clic en un control para averiguar la casilla de donde muevo y a  donde voy

    sábado, 5 de octubre de 2013 10:10

Todas las respuestas

  • Presumiblemente la matriz de controles la generas desde un bucle, que va creando una variable del tipo del control y añadiéndola a la matriz. Dentro del bucle, después de crear el control, añádele un handler para el evento click. Todos los controles los puedes conectar al mismo handler.

    No has dicho en que lenguaje trabajas, así que te pongo el ejemplo en C#; si usas VB.NET, necesitarás una llamada a "AddHandler" en lugar del "+=" para conectar el manejador:

    for ...
    {
        Control c = new Control();
        //Ponerle propiedades al control c
        c.Click += MiHanlder;
        ElArray(indice)=c;
    }
    ...
    private void MiHandler(Object sender, EventArgs e)
    {
        //Esto se ejecuta cuando hacen click en cualquier control
    }
    

    Esa rutina se dispara cuando hacen click en cualquier control. Ahora hace falta saber cuál de ellos es el que la disparó, para saber la fila y la columna. Hay varias formas de conseguirlo; como no has dado ningún detalle sobre lo que estás haciendo, no es fácil decidir cuál es la mejr forma. Te expongo varias alternativas:

    1) A cada control ponerle un nombre que dentro contenga la fila y la columna, por ejemplo "control_2_7". dentro del handler, tomar el name del sender, trocear el string y sacar de ahi los dos datos.

    2) Si el Control es una clase hecha por tí, o si puedes heredar de ella, añadir dentro dos propiedades que sean fila y columna. Asignarles valores en el bucle que construye los controles y leerlas desde el sender en el manejador.

    3) Al conectar el handler, usar un delegado anónimo o una expresión lambda pasándole los índices del bucle. De esa forma, el compilador generará una captura y el manejador podrá acceder a esas variables.

     
    domingo, 6 de octubre de 2013 8:23