Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Undo / Redo - Rückgängig machen von Aktionen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Undo / Redo - Rückgängig machen von Aktionen (2380 mal gelesen)
sebastian.
Mitglied



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

Beiträge: 90
Registriert: 03.09.2009

Windows XP Prof. SP3
AutoCAD 2010
Visual Studio 2008 / 2010 Prof.

erstellt am: 18. Nov. 2009 10:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Guten Morgen miteinander!

Ich stehe mal wieder vor einem (hoffentlich kleinen) Problem.

Laut >> diesem Beitrag << im autodesk.com Forum kann man eine eigene Undo / Redo Marke setzen, indem man folgendes bei den Transactions ergänzt:

Code:

StartUndoMark: trans = db.TransactionManager.StartTransaction()

...code...

EndUndoMark: trans.Commit()



Bei mir tritt nämlich ohne und mit diesen Markern folgendes Problem auf:
Objekte, welche ich automatisch gezeichnet habe (z.B. eingefügte Blockreferenzen) werden zwar rückgängig gemacht, wenn ich den Undo Pfeil klicke.
Aber dazu auch immer noch eine Aktion von zuvor.

Als Beispiel:

Ich zeichne eine Linie von Hand, dann werden von meinem Programm Blockreferenzen eingefügt, dann klicke ich den Undo Button und nicht nur die Blockreferenzen (wie von mir eigentlich gewünscht), sondern auch die Linie sind weg.


Zu dem Thema Undo / Redo hab ich in der Forensuche leider nichts gefunden.

Was mache ich da falsch?
Kann man diese Undomarken eigentlich nur am Start von Transactions setzen? Wahrscheinlich...


Danke mal wieder im voraus!

Viele Grüße, Sebastian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 18. Nov. 2009 10:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Sebastian,

von diesen Labels hab ich noch nicht gehört und brauchte diese (auch im Nachhinein betrachtet) auch nie. Es steht ja auch von Tony beschrieben, dass das Undo alles rückgängig macht, was in der Haupt-TransAction durchgeführt wurde.

Dass dann eine Linie mehr gelöscht wird? Da hätt ich nur 2 Verdachtsmomente:

a) Du startest den Befehl ev. aus dem Menü und hast dann hinter dem 'undo'-Aufruf auch noch ein Space, das Undo nochmals ausführt (oder ist vielleicht sogar ein 'SendCommand' in Deinem Progammablauf enthalten und schiesst das ein ' ' (Leerschritt) oder ähnliches nach?

b) könnte von Attributen der AutoCAD-Befehlsdefinition in Deinem dotNET-Projekt sein.

Erlebt hätte ich das von Dir Beschriebene noch nicht. Probier's mal an einem kleinen Musterprojekt. Wenn's dann auftritt, dann lass mir das zukommen (hier upload) und ich probiers.

- alfred -

------------------
www.hollaus.at

sebastian.
Mitglied



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

Beiträge: 90
Registriert: 03.09.2009

Windows XP Prof. SP3
AutoCAD 2010
Visual Studio 2008 / 2010 Prof.

erstellt am: 18. Nov. 2009 14:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


ClassLibrary1.zip

 
Hi Alfred!

Hab ein kleines Musterprojekt hochgeladen.

Es ist eine dll mit einem UserControl. Darauf gibt es einen Button, welcher an 0,0,0 einen Kreis zeichnet.

Wenn ich jetzt eine Linie zeichne, danach (ohne nochmal zu zoomen oder sonstiges) den Kreis zeichne, erscheint dieser.
Wenn ich jetzt den Undo Button / "Rückgängig-Mach-Pfeil" in AutoCAD klicke, ist beides weg.

Danke für die Hilfe!

Sebastian

p.s.: Während der Transaction verwende ich ein "DocumentLock", da ich sonst ja nicht per Button-Klick zeichnen könnte, wenn ich das richtig sehe. Hängt es damit zusammen? Das Zeichnen muss bei mir aber über einen Buttonklick angestoßen werden, da es eben eine GUI gibt.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 18. Nov. 2009 15:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Sebastian,

bitte das Document-Locking UNBEDINGT VOR der Initialisierung der (ersten) TransAction, dann klappts auch mit dem '_undo'.  

Das Dispose hast Du dann an der richtigen Stelle (nach Beendigung/Auflösung der letzten TransAction) gesetzt.

- alfred -

------------------
www.hollaus.at

[Diese Nachricht wurde von a.n. am 18. Nov. 2009 editiert.]

sebastian.
Mitglied



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

Beiträge: 90
Registriert: 03.09.2009

Windows XP Prof. SP3
AutoCAD 2010
Visual Studio 2008 / 2010 Prof.

erstellt am: 18. Nov. 2009 15:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank!!

Werd' ich gleich ausprobieren.
Der Tag wird ja noch richtig gut... 


Jetzt nochmal ganz dumm, aber um auf Nummer sicher zu gehen:

Zitat:
...VOR der Initialisierung der (ersten) TransAction...

Mit ersten Transaction meinst du jetzt nicht die erste, die in meinem Programm ausgeführt wird, sondern wenn es "verschachtelte" Transactions gäbe?! Dort dann die erste / oberste.

Ansonsten, wenn ich also keine verschachtelten Transactions habe, setze ich jedesmal das Lock, dann Starte ich die Transaction, dann der Code und zum Schluss trans.dispose(), dann Lock.dispose().

Wenn ich das richtig sehe, wird mir jetzt immer beim Start einer Transaction ein "Undo-Flag" gesetzt?!


Dürfte ich bei verschachtelten Transactions das Dokument wohl gar nicht nochmal sperren?! Somit wird es 1x gesperrt und auch nur ein "Undo-Flag" gesetzt, egal, wie tief die Verschachtelung ist?! Oder wird hier trotzdem für jede Transaction ein "Undo-Flag" gesetzt?

Viele Grüße, Sebastian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 18. Nov. 2009 15:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Sebastian,

Das DocumentLocking muss gemacht werden:

a) wenn ein Befehl nicht von sich aus das Document sperrt (über Attribute bei der Befehlsdefinition)
b) bevor der erste Schreibzugriff auf ein Element bewirkt wird.

Verschachtelte TransActions vermeide ich (zumeist hängt's an der Programmstrukturierung, wenn sowas notwendig werden sollte), daher komme ich auch nie in den Konflikt, wo ich das Locking setzen müsste.

Untergeordnete TransActions (in einer Verschachtelung) sind nicht relevant für die Undo-Markierung, dafür ist ausschliesslich die TopTransAction verantwortlich.

Hoffe das beantwortet alle Fragen (und zerstört nicht Deine bestehenden Gedanken zur Programm-Strukturierung )

- alfred -

------------------
www.hollaus.at

sebastian.
Mitglied



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

Beiträge: 90
Registriert: 03.09.2009

Windows XP Prof. SP3
AutoCAD 2010
Visual Studio 2008 / 2010 Prof.

erstellt am: 18. Nov. 2009 15:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hab jetzt alles geändert.
Klappt wunderbar! 

Gibt es die Möglichkeit, die Undo-Aktionen zu benennen?
Wenn ich per Hand z.B. einen Block einfüge, hat die Undo-Aktion den Namen "Block...".
Meine durch die Transactions erzeugten, heißen alle gleich.

Viele Grüße, Sebastian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

sebastian.
Mitglied



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

Beiträge: 90
Registriert: 03.09.2009

Windows XP Prof. SP3
AutoCAD 2010
Visual Studio 2008 / 2010 Prof.

erstellt am: 18. Nov. 2009 15:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Alfred!

Jetzt hatte ich wohl zu schnell ein zweites mal gepostet.

Zitat:
und zerstört nicht Deine bestehenden Gedanken zur Programm-Strukturierung

Nein, ich habe keine verschachtelten Transactions. War nur aus Interesse gefragt.

Grüße, Sebastian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 18. Nov. 2009 15:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Gibt es die Möglichkeit, die Undo-Aktionen zu benennen?

Nur wenn Du die Zeichnungsarbeit per eigenem Befehl startest, dann steht dieser Befehlsname in der Undo-Liste dabei. Startest Du es 'hinten herum' wie per Click auf Button in UserControl, dann nein.

- alfred -

------------------
www.hollaus.at

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz