Problema al arrastrar un control - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: General (https://gambas-es.org/forum-4.html) +--- Tema: Problema al arrastrar un control (/thread-1368.html) |
Problema al arrastrar un control - Shell - 20-05-2023 Buenas!. Viendo un ejemplo de Cogier sobre Drag y Drop, creé algo similar. Pero cuando el objeto es arrastrado fuera del lugar donde debe estar, este se borra y se elimina de su contenedor de origen. Tengo un panel con tres etiquetas. Cada etiqueta tiene una palabra que forman una frase desordenada. Se trata de llevar cada etiqueta al otro panel y que la frase se pueda ver ordenada. Una vez el control se ha arrastrado o creado en el otro panel, debe ser eliminado del panel de origen. Para probar el efecto debe ser arrastrado fuera de su contenedor y que no sea el panel 2. Al pulsar el botón de check se comprueba si el orden de la frase es correcto. Este es el código. Código: Private aphrase As String[] = ["Order", "the", "phrase"] Saludos RE: Problema al arrastrar un control - vuott - 20-05-2023 Me parece que a mi funciona. Cuando transporto el Control, que contiene una de las tres palabras, desde el Panel1 y lo coloco en el Panel2, el Control desaparece del Panel1. RE: Problema al arrastrar un control - Shell - 21-05-2023 (20-05-2023, 23:57)vuott escribió: Cuando transporto el Control, que contiene una de las tres palabras, desde el Panel1 y lo coloco en el Panel2, el Control desaparece del Panel1. Intenta arrastrarlo al formulario y soltarlo en este, desaparecerá del Panel1. Saludos RE: Problema al arrastrar un control - tincho - 21-05-2023 El problema puede deberse a que el elemento sobre el cual se crea el drag es eliminado en el mismo evento del drag. Código: Public Sub words_MouseDrag() RE: Problema al arrastrar un control - Shell - 21-05-2023 (21-05-2023, 00:47)tincho escribió: El problema puede deberse a que el elemento sobre el cual se crea el drag es eliminado en el mismo evento del drag. Eso es lo primero que intenté. Pero la eliminación del source se debe ejecutar en alguna parte. Para saber que control es, o de donde proviene. La información real que se traspasa es el texto, el control es lo de menos, se va a crear un control similar en el otro panel con la información del control source. El problema reside en eliminar el control en el panel origen y desde donde debe realizarse o como hacerse. Tengo de hace años otro ejemplo con dos ListView y no me ocurre eso. Gracias a los dos. Saludos RE: Problema al arrastrar un control - vuott - 21-05-2023 (21-05-2023, 00:08)Shell escribió: Intenta arrastrarlo al formulario y soltarlo en este, desaparecerá del Panel1. ¿Quieres que el Control con el texto, si lo sueltas fuera de Panel2 (por ejemplo, en el Formulario), no desaparezca de Panel1 ? RE: Problema al arrastrar un control - Shell - 21-05-2023 (21-05-2023, 16:45)vuott escribió: ¿Quieres que el Control con el texto, si lo sueltas fuera de Panel2 (por ejemplo, en el Formulario), no desaparezca de Panel1 ? Eso es. Que solo se puede soltar en Panel2 o del Panel2 al Panel1 pero nunca al formulario. RE: Problema al arrastrar un control - Shell - 21-05-2023 Buenas!. Parece que lo he solucionado. Un control si no se destruye, se puede reutilizar. En este caso, parece lo más acertado. Aparentemente no puedo destruir algo que se está arrastrando. Por de pronto para que el formulario no admita que algo se pueda soltar en el, se puede hacer: Código: Public Sub Form_Open() ¿ Qué es realmente lo que paso de un lado a otro ?. ¿ Cuál es la información ?. El texto que contiene la etiqueta, no la etiqueta en si. Entonces puedo. Si sé que el panel 1 tiene tres etiquetas, creo el mismo número de etiquetas en el panel 2, pero en este las hago todas invisibles. No vamos a crear más etiquetas, solo las necesarias. Ahora bien, ¿ Cómo se va añadiendo la información a esas etiquetas ?. En orden. Se comprueba cada una de las etiquetas del panel 2 ( si estamos pasando del panel 1 al panel 2 ), la primera etiqueta del panel 2 que este invisible y que su texto sea una cadena vacía, se hace visible y se le pasa el texto que se ha arrastrado. Luego rompemos el bucle, para que no se llene de etiquetas con el mismo contenido. Y hasta ahí parece que funciona. Código: Private aphrase As String[] = ["Order", "the", "phrase"] Tengo que traducir los textos, claro. Os añado el código que funciona. Siempre el verdadero problema es el entender el problema y como se debería hacer. ¿ Puedo borrar el control ?. ¿ Necesito borrar el control ?. ¿ Puedo reutilizar ese control ?. Aún tiene un fallo menor, que es que la frase este en el orden correcto. Saludos |