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! -
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! -
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 -
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! -
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...! -
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..)
Listlista = 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! -
