Listbox editable guardar valores

Estimados amigos
xojo

Saludarles y agradecerles por sus respuestas que me hagan llegar para solucionar de manera optima la siguiente situacin planteada:

En una ventana de un sistema de escritorio, necesito que cuando estoy en modo Edicin guardar temporalmente los valores mostrados en un Listbox editable, de manera que pueda compararlos al momento que el usuario trata de salir de la ventana sin grabar, debo determinar si ha existido alguna modificacin en el contenido de alguna celda con respecto a los valores iniciales.
Como se podr almacenar los valores iniciales del ListBox editable y poderlos comparar cuando el usuario intenta salir sin haber grabado; un amigo me han llegar una idea que tengo que almacenarlo en el me.celltag, pero es muy bueno tener mas ideas o comentarios al respecto.

Cordialmente,

Raul Juarez Pulache

Si no se utiliza la CellTag, me parece una buena plaza para almacenar el valor de inicio.
http://documentation.xojo.com/index.php/ListBox.CellTag

Lo de poner valores iniciales en el cellTag es una opcin, como tambin tener una propiedad en la ventana, lo que habitualmente llamamos el ‘dirty flag’; si resultase ‘true’ en el CancelClose de la ventana, se advierte al usuario que debe guardar los cambios.

Ejemplo, al entrar en el cell, inmediatamente colocar el valor existente en el celltag. Al salir, compara el valor actual el anterior y asigna un boolean, digamos ‘cellWasChanged’, si cambi. Entonces usando el ‘dirty flag’ de la ventana ‘windowWasChanged’:

[quote]windowWasChanged=windowWasChanged AND cellWasChanged
[/quote]

As no tienes que comparar cada cell al final.

Gracias
Vaughn Cordero

Su respuesta me ayudo a solucionar lo planteado, solo con una pequea modificacin, en el operador lgico.
He creado una propiedad en la ventana llamada windowsWasChanged de tipo boolean con Default False.
En listbox (clase) he creado las propiedades CellWasChanged tipo boolean con Default False y PreviousCellValue.
En CellGotFocus almaceno el valor inicial

Me.PreviousCellValue=Me.cell(row,column)

Y en CellLostfocus, comparo si el valor inicial es diferente al valor Final en una determinada celda; si es verdad, es porque se ha producido cambios, de lo contrario NO se han producido cambios

[code] If VAL(Me.PreviousCellValue) <>VAL(Me.cell(row,column)) Then 'Para dgitos numricos

             Me.cellWasChanged=True
             Self.windowsWasChanged=Self.windowsWasChanged OR Me.CellWasChanged 'resultado de operador logico OR

End If[/code]

Operador Lgico OR
WindowsWasChanged OR CellWasChanged Resultado
True True True
True False True
False True True
False False False

He probado y creo que el operador lgico a utilizarse para lo planteado debe ser el OR (salvo mejor opinin)

Saludos

Raul

Ah te doy toda la razn; la lgica es ‘OR’ y el resultado se conserva en WindowsWasChanged.
Tena la mente nublada :smiley:

Se puede simplificar:

[quote]Self.WindowWasChanged=Self.WindowWasChanged OR (Me.PreviousCellValue<>Me.cell(row,column))
[/quote]

Tambin pensara (puramente cuestin de estilo) que el val() es opcional: lo peor que puede pasar es un inofensivo ‘falso positivo’ ocasional (lo que se debe evitar es un ‘falso negativo’ que no guardara los cambios).