|
Página 1 de 1
|
Eliminar Un Objeto De Su Contenedor Padre
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Eliminar Un Objeto De Su Contenedor Padre
Buenas!.
Después de ver el mensaje de GambaFeliz en este post:
Problema con los indices en un contenedor padre al eliminar objetos contenidos
Antes de nada diré. ¿ No decimos que la propiedad Children devuelve una colección ?. ¿ Es realmente una colección o es un array ?.
Aparenta ser más un array de controles, que no una colección de controles..
Tengo un formulario con una matriz de n botones de ancho por n botones de alto. Y quiero eliminar o hacerlos "invisibles" con el ratón los que quiera.
La parte importante es esta, pero fijaros en el comentario que digo de la propiedad visible del control botón y su padre Panel.
Sobre todo es importante que tengamos en cuenta la propiedad "Tag".
Public Sub Observador_Click()
Dim unboton As Button
Dim indice As Integer
indice = Last.tag
For Each unboton In Panel1.Children
'Eliminar el botón del panel
'If unboton.tag = indice Then unboton.Delete
' ¿ Y si quieres hacerlo invisible ?. Si usas la propiedad visible, desparece de la vista del contenedor padre pero no evita que se redistribuyen los "niños"
'Entonces...y si lo hacemos invisible de otra forma...B-D
If unboton.Tag = indice Then
With unboton
.Border = Border.None
.Tag = ""
.Text = ""
End With
Endif
Next
End
Haciéndolos "invisibles"
Y eliminando los que queramos del panel.
Saludos
Descripción: |
Eliminar o hacer invisibles botones dentro de un contenedor Panel |
Descargar |
Nombre del archivo: |
ObjetosEnPanel-0.0.1.tar.gz |
Tamaño: |
12.12 KB |
Descargado: |
253 veces |
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Viernes, 26 Junio 2020, 13:31; editado 1 vez
|
#1 Viernes, 26 Junio 2020, 13:27 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Eliminar Un Objeto De Su Contenedor Padre
Preguntaros esto:
Si la propiedad Children fuera una colección. ¿ Tengo necesidad de recorrer "todo" los elementos para hacer algo concreto con un solo objeto ?.
El código sigue teniendo un problema al cambiar el tag a texto, quiere un entero (eso en el caso de querer que sean invisibles)....
Habrá que saber si ya fue pulsado el botón o eliminar la nueva asignación de tag dentro del with.
De todas formas a lo mejor puede no interesar que se vuelva a comprobar algo que ya se ha pulsado .
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Viernes, 26 Junio 2020, 13:46; editado 1 vez
|
#2 Viernes, 26 Junio 2020, 13:34 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Eliminar Un Objeto De Su Contenedor Padre
Se puede añadir un array global tal que este:
En el form_open() cambiar el tamaño de este según el número de botones alto x ancho
pulsados.Resize(BOTONESXANCHO * BOTONESXALTO)
Y ademas evita un nuevo recorrido si ya se ha pulsado el botón..
Public Sub Observador_Click()
Dim unboton As Button
Dim indice As Integer
indice = Last.tag
If pulsados[indice] = False Then
For Each unboton In Panel1.Children
'Eliminar el botón del panel
'If unboton.tag = indice Then unboton.Delete
' ¿ Y si quieres hacerlo invisible ?.
' Si usas la propiedad visible, desparece de la vista del contenedor padre pero no evita que se redistribuyen los "niños"
' Entonces...y si lo hacemos invisible de otra forma...B-D
If unboton.Tag = indice Then
pulsados[unboton.Tag] = True
With unboton
.Border = Border.None
.Text = ""
End With
Endif
Next
Endif
End
Podía haber usado en la comprobación..
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Viernes, 26 Junio 2020, 13:58; editado 1 vez
|
#3 Viernes, 26 Junio 2020, 13:56 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Eliminar Un Objeto De Su Contenedor Padre
Y dicho sea de paso para que no veamos como reacciona el botón "invisible"....podemos poner la propiedad "enable" a "False" del botón:
Y con esto y un bizcocho, buen fin de semana a todos..no corráis..
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Viernes, 26 Junio 2020, 14:05; editado 1 vez
|
#4 Viernes, 26 Junio 2020, 14:05 |
|
|
gambafeliz
Analista Programador
Registrado: Julio 2019
Mensajes: 830
Edad: 54
|
Re: Eliminar Un Objeto De Su Contenedor Padre
Shell escribió: Buenas!.
Después de ver el mensaje de GambaFeliz en este post:
Problema con los indices en un contenedor padre al eliminar objetos contenidos
Antes de nada diré. ¿ No decimos que la propiedad Children devuelve una colección ?. ¿ Es realmente una colección o es un array ?.
Aparenta ser más un array de controles, que no una colección de controles..
Pero que busca boca eres
Si, es un array, sin duda, yo no me he leído ahora a mi mismo, suelo meter la pata en palabras simplemente por que se lo que pienso pero no lo expreso por escrito. Y si, soy un desastre con los conceptos, pero cuando programo y tengo una meta, suelo llegar a ella "como sea", así soy yo.
Mil disculpa por la cagada.
Nota: Tras leerte has escrito mucho pero al final no has respondido por código con el título de tu hilo "Eliminar un objeto de su contenedor padre", se que lo haces en alusión a mi hilo, pero no lo aclaras según tu forma de programa, chupate esa (supongo que entiendes que es broma y no lo veas como otros, que dicen de mi algo como que yo trato el foro como una verdulería, que curiosamente hay que leer bien el hilo para pensar quien es el verdulero y quien es el que compra verduras, en fin, lo que tengo claro es quien soy yo)
Aaadios
última edición por gambafeliz el Viernes, 26 Junio 2020, 19:41; editado 1 vez
|
#5 Viernes, 26 Junio 2020, 19:39 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Eliminar Un Objeto De Su Contenedor Padre
GambaFeliz:
Citar:
Nota: Tras leerte has escrito mucho pero al final no has respondido por código con el título de tu hilo "Eliminar un objeto de su contenedor padre", se que lo haces en alusión a mi hilo, pero no lo aclaras según tu forma de programa, chupate esa (supongo que entiendes que es broma y no lo veas como otros, que dicen de mi algo como que yo trato el foro como una verdulería, que curiosamente hay que leer bien el hilo para pensar quien es el verdulero y quien es el que compra verduras, en fin, lo que tengo claro es quien soy yo)
Ah, es que me gustó mas hacerlo invisible el botón.
Eliminar el botón del contenedor era más sencillo. Aunque al principio también me costó entenderlo.
Me encontré el problema de los indices, como van cambiando según eliminas controles.
El recorrido es obligatorio y más lento al ser un array. Pero...encontré otra forma mejor si quieres eliminar.
Subo una modificación del código. He abreviado más el código.
Comenta si este te parece más acorde.
¿ Te interesa más eliminar con un indice ?.
Saludos
Descripción: |
Elimina objetos de un panel |
Descargar |
Nombre del archivo: |
EliminaObjetosDentroDelPanel-0.0.1.tar.gz |
Tamaño: |
11.83 KB |
Descargado: |
243 veces |
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#6 Domingo, 28 Junio 2020, 09:59 |
|
|
gambafeliz
Analista Programador
Registrado: Julio 2019
Mensajes: 830
Edad: 54
|
Re: Eliminar Un Objeto De Su Contenedor Padre
Ya Shell pero tu caso es para controles que son visibles para el usuario pero mi caso y quizás no te lo he dicho en ninguna para es para controles no visibles para el usuario que es fundamental que el programador los destruya por completo para crearlos nuevamente según su necesidad, algo como creo 2 controles y después los destruyo para volverlo a crear 2 o 4 nuevos con el name 1, 2 o 1, 2, 3, 4
Son cosas que necesitaba, pero que mi sorpresa fue cuando intentaba destruirlos y noté que cuando usaba For-Next para recorrerlo y destruía el primero creado pues no podía destruir el segundo por que iba con un orden de indice incrementado. Y es cuando noté que debía destruirlo con For-Next Step y después todo funcionó.
Y como bien decías efectivamente esto me ocurría por que era un array de controles.
Muchas gracias por tu extenso aporte.
Aaadios
|
#7 Domingo, 28 Junio 2020, 19:58 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Eliminar Un Objeto De Su Contenedor Padre
GambaFeliz:
Cuando tu veas que tienes un problema con un código y no quieres subir todo un proyecto, por ser algo personal, por motivos distintos,
son proyectos que en principio pues son tuyos y por otra parte no a todos nos valen los proyectos de otros usuarios.
Imagina subir todo un proyecto enorme, no es necesario para centrarnos en una parte determinada.
Intenta subir un pequeño código donde demuestras el error para que podamos testearlo todos los que podamos ayudarte
sin ser todo el proyecto, solo una forma de demostrar el error. Esto vale para todos nosotros.
Por otra parte ya no es solo por el error y su solución, otros compañeros pueden darte una mejora que te puede interesar.
Si tu conoces una forma de hacer las cosas, otro usuario puede enseñarte otra posibilidad de llegar al mismo
lugar.
A mi me gusta ayudar, ya que a la vez que ayudo , aprendo.
Mi problema es que me anticipo mucho, eso me motiva en parte, pero debería de hacerlo de otra forma,
tomarlo con más tranquilidad...soy muy inquieto...
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#8 Lunes, 29 Junio 2020, 11:33 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|