Comunidad de diseño web y desarrollo en internet online

eliminar botones

Citar            
MensajeEscrito el 02 Mar 2009 11:13 am
hola, tengo un inconveniente eh creado una galeria la cual carga estos botones cada bez que se busca un xml nuevo.
el tema es que si por ejemplo la primer galeria tiene 30 fotos y la segunda 10 , a pesar de que este codigo se ejecuta, los 20 botones generados la primera vez siguen estando presente. es decir, funcionan los 10 primeros correctamente pero igual, siguen figurando los anteriores

a alguen se le ocurre como solucionar esto.
probe con un _control.removedChild(boton), pero lo cierto es que no me ah funcionado ya que los botones no me los vuelve a agregar.
a quien pueda ayudarme estare muy agradecido.

Código :

for (var i:int = 0 ; i < cNodes.length -1 ; i++){
            //boton.txtbtnchico.text = "aver"
            var j:uint = i
            var boton:Botonchico = new Botonchico()
            boton.x = 2+i%5*23;
            boton.y = 100+ (Math.floor(i/5)*23);
            boton.texto.text = i.toString()
            boton.fondo.id = i
                        
            
            //boton
            
            boton.fondo.addEventListener(MouseEvent.CLICK, ctrlFoto);
            //trace(evt.target.boton)
            _control.addChildAt(boton,3)
            

Por wendel68

6 de clabLevel



 

safari
Citar            
MensajeEscrito el 02 Mar 2009 11:39 am
Efectivamente tienes que eliminar los botones anteriores. Claro que para ello tienes que acceder a ellos.

Si están todos en un MC "contenedor" puedes hacer un

Código ActionScript :

for each (var mc:DisplayObject in contenedor){
     contenedor.removeChild(mc)
}
//ó
while (contenedor.numChildren>0){
   contenedor.removeChildAt(0)
}


Si no, puedes darle propiedad "name" a tus botones y buscarlos con un getChidlByName y eliminarlos con un removeChild

Código ActionScript :

//cuando los creas
for (....){
     boton.name="boton"+i.toString();
}
//a la hora de borrarlos
for (var i:int=0;i<30;i++){
    try{
       var mc:DisplayList=getChildByName("boton"+i.toString());
       removeChild(mc);
    }catch{
       continue;
    }
}

O meterlos en un array y eliminarlos

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Mar 2009 09:36 am
genia, sos un fenomeno, estoy muy agradecido.

Por wendel68

6 de clabLevel



 

safari
Citar            
MensajeEscrito el 03 Mar 2009 10:21 am
mira, disculpa, no eh podido eliminarlos, en cuanto a la primera funcion creo no es aplicable puesto que dentro del mc _control, hay mas objetos ademas de los botones. igualmente eh aplicado la funcion y tampoco estos se han eliminado.

en el segundo caso tampoco lo eh logrado, me da un error de sintaxis, el la linea catch.

otra pregunta para seguir abusando.

mc es una variable nueva y el contenedor en este caso es _control o boton?
gracias, muchas gracias

Por wendel68

6 de clabLevel



 

safari
Citar            
MensajeEscrito el 03 Mar 2009 10:53 am
Le puse un try catch porque no sé si, caso de que no exista el botón getChildByName devuelve null o un error, pero se me olvido "cachar" el error
Así que, debería ser

Código ActionScript :

for (var i:int=0;i<30;i++){ 
    try{ 
       var mc:DisplayList=getChildByName("boton"+i.toString()); 
       removeChild(mc); 
    }catch (e:Error){ 
       continue; 
    } 
} 

ó, si devolviese null, escribiríamos mejor

Código ActionScript :

for (var i:int=0;i<30;i++){ 
       var mc:DisplayList=getChildByName("boton"+i.toString()); 
       if (mc!=null){
           removeChild(mc); 
       }else{
          break
       }
} 


Lo de la variable. Para manejar un MC ó un Sprite o lo que sea, lo realizamos mediante una "variable que haga referencia" al Objeto. Así, p.e. al principio has escrito

Código ActionScript :

var boton:Botonchico = new Botonchico()

ese "boton" es una variable que hace referencia a tu Objeto BotonChico. Una variable que, después de ejecutarse su función desaparece al haberla definida dentro de una función. Sí, en Flash estamos constantemente creando y eliminando variables que hacen referencia a MCs

De hecho, cuando tenemos un MC con un "nombre de instancia", lo que realmente tenemos en Flash es una "variable que hace referencia al MC". Lo que pasa es que esta variable, pertenece a nuestra película principal y permanece a lo largo de toda la vida de la película.

NOTA:No leí demasiado bien tu código. en lugar de "contenedor" debería haber puesto "_control" (que es donde están los botones)

Código ActionScript :

for each (var mc:DisplayObject in _control){ 
     contenedor.removeChild(mc) 
} 
//ó 
while (_control.numChildren>0){ 
   _control.removeChildAt(0) 
} 

o, puesto que he visto que añades los botones en la posición 3

Código ActionScript :

while (_control.numChildren>3){ 
   _control.removeChildAt(3) 
} 


Y sí, si lo queremos hacer por nombre, debería ser

Código ActionScript :

//a la hora de borrarlos 
for (var i:int=0;i<30;i++){ 
    try{ 
       var mc:DisplayList=_control.getChildByName("boton"+i.toString()); 
       _control.removeChild(mc); 
    }catch (e:Error){ 
       continue; 
    } 
} 
//ó
for (var i:int=0;i<30;i++){ 
       var mc:DisplayList=_control.getChildByName("boton"+i.toString()); 
       if (mc!=null){
           _control.removeChild(mc); 
       }else{
          break
       }
} 

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2009 08:28 am
gracias nuevamente, tratare de postear mas respuestas de aqui en adelante, me has dado una leccion de comunismo muy interesante, sos un fenomeno!!!!

Por wendel68

6 de clabLevel



 

safari

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.