Rich said:
Thanks for your reply. This sounds kind of interesting, except that the
last
time I did anything which involved the "words" stack/push/pop - was in
C++
in the classroom environment about 10 years ago.
When you say stack - are you refering to the Heap stack? or are you using
"Stack" metaphorically? As in - I log each action in a collection object
or
a datatable or something where for example - a user updates a field in a
row
in some table on the database but needs to undo that action - so the app
looks at the last row in the collection datatable where I have stored the
criteria used to update this field and what the value was before the
update
and restore the previous value?
My goal is to not re-invent the Undo Wheel if it already exists in VB2005.
If I can use the Heap to reverse an action - that would be great. But if
that isn't what you are refering to, then I was planning on writing my own
undo routine where I store each action as I described above stuff to their
previous states - which would actually be a new action.
If you ARE referring to the Heap, could you refresh my brain on how to
push
and pop stuff on the heap?
Thanks,
Rich
The Stack I am talking about is a "Collection" class in Dot.Net V2.0. Check
out System.Collections.Generic.Stack(Of T). The 'T' is the type of object
you are storing. If you create a set of Action objects then they should all
inherit from a base class that has the methods defined that you will use
'Do' and UnDo'. Then the declaration for the Stack would be
Dim MyStack as System.Collections.Generic.Stack(Of BaseClassForActions)
Then to add a new action you create the action (after it is succesfully
completed) to the stack with the following code (assuming an class named
ActionAdd has been defined and has a method Do which returns a boolean
indicating the success of the action) :
Dim MyAction as new ActionAdd
MyAction.NewText = 'NewText'
if MyAction.Do then
' action worked
MyStack.Push(MyAction)
end if
Now if you want to handle an UnDo the code would be as follows:
Dim UnDoAction as BaseClassForActions ' Note we use the baseclass so that
all action objects returned from a Pop will have the UnDo method
if MyStack.count > 0 then
UnDoAction = MyStack.Pop
UnDoAction.UnDo
end if
This should provide a start for the general framework. The actual action
objects are according to the type of application you have.
Lloyd Sheen