12 Último

Para acortar el código

      • 17
      • mensajes
      • miembro desde
      • 08/09/07
    09/12/2007
    #1 Para acortar el código

    Buenas...

    Necesito repetir un mismo código para un cierto número de objetos del mismo tipo (picturebox). La idea sería meter el código en un ciclo que primero efectue el código para el picturebox1, después para el picturebox2, etc. En una versión más vieja del visual cuando copiabas y pegabas un objeto te prguntaba si querías crear un array y no me acuerdo como pero con esto lo resolvía. Ahora estoy con el Visual 2005 y me dijeron que se hace de otra forma, pero a pesar de que busqué bastante no encontré como...

    Al que me pueda dar una mano con esto, gracias!

  1. ¿Este tema te pareció interesante? Compártelo!

    ¿No es lo que buscabas? Intenta buscar un tema similar

    11 comentarios / 895 Visitas

      • 121
      • mensajes
      • miembro desde
      • 27/01/06
    • _X_
      _X_ está desconectado
      Senior Member
    09/12/2007
    #2 Re: Para acortar el código

    me manejo mas q nada cn c# pero .net es .net.. lo q podes hacer aca es crear un funcion q tome como parametros (no me acuerto bien q toma, el VS no lo tgo instalado en este momento ¬¬) objectSender e y algo mas, fijate en cualquier funcion asociada a un evento, como el de click, dp lo q se hace es -si no me equivoco- seleccionas todos los objetos y fijate q hay un botoncito q t muestra los metodos (tiene forma d rayito creo,) d los objetos, entonces lo q se hace es asociar la funcion q creaste cn un determinado evento del objeto.. o sea, para el evento onClick se dispara la funcion lalala, se entiende?

    eliminaron el array d objetos xq segun me decian internamente el compilidor d VB6 hacia un quilombo y era lento.. etc...

    Saludos!

      • 333
      • mensajes
      • miembro desde
      • 15/07/07
    09/12/2007
    #3 Re: Para acortar el código

    segun lo que lei arriba lo que queres hacer y _X_ te explico es asignar un metodo a los eventos de los controles...

    para hacer eso en C# (VB .NET debe ser similar, google it) tenes que hacer por ejemplo

    boton1.OnClick += new EventHandler(nombredelmetodo);

    el metodo tiene que ser del tipo que acepta el evento. Por ejemplo, para el metodo click tiene que ser

    modificadordeacceso void nombredelmetodo (object sender, EventArgs e) {}

    e es un objeto de tipo eventargs que trae informacion sobre el evento y sender es el objeto que ejecuto el evento propiamente.

    Te conviene leer algo por ahi de los tipos delegates y como manejar eventos. Es sencillo...

    vos imaginate que tenes un solo metodo y a cada evento le pones un "puntero al metodo", entonces cada vez que se dispare ese evento se ejecuta el metodo.
    Se pueden ejecutar varios metodos atras del otro, o varios paralelamente. Aunque eso ya es mas avanzado.

    Espero que hallas entendido algo, sino preguntá!

    saludos!

    leo

      • 121
      • mensajes
      • miembro desde
      • 27/01/06
    • _X_
      _X_ está desconectado
      Senior Member
    09/12/2007
    #4 Re: Para acortar el código

    VB.net tiene delegates? pero no viene al caso.. ahi esta -mejor explicado :P- como seria "x codigo", lo q yo trate d explicar fue como hacerlo x medio d la ide

    fijate q en el object sender t viene una ref al objeto q invoca al metodo xq lo q no necesariamente podes asignar el metodo a objetos del mismo tipo, usando esa var para id el obj (si tuviera la ide instalada seria mas preciso xD) q lo llama y exe codigo distinto deacuerdo al caso.. pero creo q cn esto basta y sobra para lo q necesitas..

    Saludos!

      • 333
      • mensajes
      • miembro desde
      • 15/07/07
    09/12/2007
    #5 Re: Para acortar el código

    jajajjaja un gusto tratar de explicar con vos _X_

    y si, hay delegates en VB .NET, hay bastantes tutoriales en internet sobre como implementarlos...

    un saludo colega!

    leo

      • 121
      • mensajes
      • miembro desde
      • 27/01/06
    • _X_
      _X_ está desconectado
      Senior Member
    09/12/2007
    #6 Re: Para acortar el código
    lo mismo digo.. pero antes q VB.net me quedo cn VB6, si uso delegates lo hago en C#
    siguiendo el off toy chocho q agarre dos $$prog$$ para hacer ahora en las vacas

    Saludos colega!
      • 17
      • mensajes
      • miembro desde
      • 08/09/07
    11/12/2007
    #7 Re: Para acortar el código

    Gracias por la ayuda pero a la mayoría no les entendí ni papas... Estoy tratando de armar un final para la facu, no cacho demasiado de estos temas...

    A ver si alguno que maneje visual 2005 me da una explicación más "paso a paso" de como resolver esto. Necesito que este código...

    If PictureBox1.Top = PictureBox2.Top + PictureBox2.Height And PictureBox1.Left + PictureBox1.Width > PictureBox2.Left And PictureBox1.Left < PictureBox2.Left + PictureBox2.Width Then
    mov_up = False
    EndIf
    If PictureBox1.Top + PictureBox1.Height = PictureBox2.Top And PictureBox1.Left + PictureBox1.Width > PictureBox2.Left And PictureBox1.Left < PictureBox2.Left + PictureBox2.Width Then
    mov_down = False
    EndIf
    If PictureBox1.Left = PictureBox2.Left + PictureBox2.Width And PictureBox1.Top + PictureBox1.Height > PictureBox2.Top And PictureBox1.Top < PictureBox2.Top + PictureBox2.Height Then
    mov_left = False
    EndIf
    If PictureBox1.Left + PictureBox1.Width = PictureBox2.Left And PictureBox1.Top + PictureBox1.Height > PictureBox2.Top And PictureBox1.Top < PictureBox2.Top + PictureBox2.Height Then
    mov_right = False
    EndIf

    ...se repita para los picturebox del 2 (o sea el código de arriba) al 100. Lo único que habría que cambiar es donde dice picturebox2 por 3, después por 4 y así... el tema es que no quiero copiar el código y cambiarlo 100 veces! (además de que así me queda un choclo re incómodo)

    En fin, creo que ya se había entendido la pregunta pero a lo mejor así alguien me puede tirar algo más cercano a mi entendimiento

    Saludos y graciela...!

      • 121
      • mensajes
      • miembro desde
      • 27/01/06
    • _X_
      _X_ está desconectado
      Senior Member
    15/12/2007
    #8 Re: Para acortar el código

    solo entro a internet entre findes asi q sorry x la demora... mira ya entiendo mejor lo q decis..
    hace un funcion q tome como argumeto a un picturebox (o 2, fijate) y donde dice picturebox1 en tu codigo aca poner pbx1 y donde picturebox2, pbx2..

    algo asi:

    private int procedure (PictureBox pbx1, PictureBox pbx2)
    {
    tu codigo..
    }

    y a esa funcion la llamas 100 veces en un for x ej pasandole los distindos picturebox (t recomendaria ponerlos en una lista..)

    List lista = new List();
    lista.Add(PictureBox1);


    o mejor desde un foreach

    foreach (PictureBox pbx in lista)
    {
    procedure(PictureBox1, pbx);
    }
    asi si quicieras dejar fijo el primer picturebox.. (fiajte d no repetirlo cuando lo pongas en la lista..)

    fijate como seria en VB.net :P

    Saludos!

      • 333
      • mensajes
      • miembro desde
      • 15/07/07
    15/12/2007
    #9 Re: Para acortar el código
    Cita Escrito por _X_ Ver mensaje
    solo entro a internet entre findes asi q sorry x la demora... mira ya entiendo mejor lo q decis..
    hace un funcion q tome como argumeto a un picturebox (o 2, fijate) y donde dice picturebox1 en tu codigo aca poner pbx1 y donde picturebox2, pbx2..

    algo asi:

    private int procedure (PictureBox pbx1, PictureBox pbx2)
    {
    tu codigo..
    }

    y a esa funcion la llamas 100 veces en un for x ej pasandole los distindos picturebox (t recomendaria ponerlos en una lista..)

    List lista = new List();
    lista.Add(PictureBox1);


    o mejor desde un foreach

    foreach (PictureBox pbx in lista)
    {
    procedure(PictureBox1, pbx);
    }
    asi si quicieras dejar fijo el primer picturebox.. (fiajte d no repetirlo cuando lo pongas en la lista..)

    fijate como seria en VB.net :P

    Saludos!

    para armar la lista podes usar esto:

    Código:
                List lista = new List();
                foreach (Control ctrl in this.Controls)
                {
                    if (ctrl is PictureBox)
                    {
                        lista.Add((PictureBox)ctrl);
                    }
                }
    y despues haces lo que te dijo _X_ arriba.

    Suerte!!
      • 17
      • mensajes
      • miembro desde
      • 08/09/07
    15/12/2007
    #10 Re: Para acortar el código

    Gracias gente por las respuestas...! Creo que ya le voy cachando la onda a esto...!

12 Último