none
Deshacer última acción RRS feed

  • Pregunta

  • Saludos!
    Tengo un pequeño problema con mi aplicación, que les comento:
    Dispongo de una listBox y 4 botones. Cada una de ellos, al seleccionar un elemento de la listBox, actualizan un nodo (cada botón un nodo distinto), de un fichero xml (el nodo en cuestión tiene como innerText un número, y cada botón lo que hace es sumarle 1 al valor que tenía ese nodo). Una vez actualizado el valor, guardan nuevamente el fichero xml en el mismo sitio donde se hallaba. Dispongo de un botón deshacer, que lo que quiero es que al seleccionar un elemento de la listBox deshaga la última acción que se haya realizado sobre ese elemento (cualquiera de las 4 acciones posibles. En otras palabras, restar 1 al último nodo actualizado del fichero .xml). El problema es que no sé cómo puedo saber cuál es el último botón que se ha pulsado. Tampoco puedo crear 4 botones distintos para deshacer cada una de las acciones por cuestión de espacio (mi aplicación es para dispositivos móviles).
    Gracias y un saludo!
    jueves, 13 de agosto de 2009 9:10

Respuestas

  • Hola Bece,

    se me ocurre que podrías crearte una estructura de datos en la cual guardes el identificador de un botón.
    Cada vez que pulses un botón, instancias un objeto de esa estructura, le indicas qué botón se ha pulsado y lo guardas en una Pila (Stack) que crearás para cada elemento del listbox que se vaya pulsando. Podrías tener un diccionario del tipo Dictionary<string,Stack> en el que, por cada elemento que selecciones del listbox, añadirás un elemento al diccionario (un par "identificador del elemento" - Stack) , creando un Stack en el que meterás objetos de la estrucutra que te comenté antes.
    Quizás puedes obviar la estructrua y en el Stack guardar directamente el identificador del botón (un string que te identifique que botón pulsaste).

    De esa forma, si quieres volver hacia atrás, sólo deberás buscar el elemento seleccionado en el Dictionary (es la clave), recuperar el stack correspondiente (es el valor) y del Stack obtener el elemento que está en la cabeza (el último botón que se pulsó).

    No sé si me explico bien. Si tienes alguna duda intentaré responderte mejor.



    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    • Marcado como respuesta Bece jueves, 13 de agosto de 2009 11:38
    jueves, 13 de agosto de 2009 9:26

Todas las respuestas

  • Hola Bece,

    se me ocurre que podrías crearte una estructura de datos en la cual guardes el identificador de un botón.
    Cada vez que pulses un botón, instancias un objeto de esa estructura, le indicas qué botón se ha pulsado y lo guardas en una Pila (Stack) que crearás para cada elemento del listbox que se vaya pulsando. Podrías tener un diccionario del tipo Dictionary<string,Stack> en el que, por cada elemento que selecciones del listbox, añadirás un elemento al diccionario (un par "identificador del elemento" - Stack) , creando un Stack en el que meterás objetos de la estrucutra que te comenté antes.
    Quizás puedes obviar la estructrua y en el Stack guardar directamente el identificador del botón (un string que te identifique que botón pulsaste).

    De esa forma, si quieres volver hacia atrás, sólo deberás buscar el elemento seleccionado en el Dictionary (es la clave), recuperar el stack correspondiente (es el valor) y del Stack obtener el elemento que está en la cabeza (el último botón que se pulsó).

    No sé si me explico bien. Si tienes alguna duda intentaré responderte mejor.



    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    • Marcado como respuesta Bece jueves, 13 de agosto de 2009 11:38
    jueves, 13 de agosto de 2009 9:26
  • Buenas

    Lo que puedes hacer es guardar simplemente un valor que haga referencia al nodo modificado, ya sea por "key", por índice... y guardar su valor antes de ser modificado. Cuando le des a deshacer solo tienes que buscar el nodo con la "ley" asociada y asignarle el valor guardado.

    string[] nodoAntesDeModificar = new string[]{"keyNodo1", 3};

    Esto sirve para deshacer la última acción, si lo que quieres es poder deshacer varias veces tendrás que implementar un Stack como a propuesto Javier.


    Un saludo
    View Daniel Valcarce Miranda's profile on LinkedIn
    jueves, 13 de agosto de 2009 9:55
  • Me ha servido la solución del diccionario y la pila, muchas gracias!
    jueves, 13 de agosto de 2009 11:38