Mit Hilfe der Meldungsverarbeitung und einiger weiterer Funktionen ist auch die Verarbeitung von Drag-and-Drop Ereignissen möglich.
Drag and Drop in ObjectList-Controls
Damit ein SOGObjectGrid-Control Drag-and-Drop Ziel werden kann, muss bei Initialisierung der Dialogmaske eingestellt werden, welche Objektklassen der Control akzeptiert.
[GuiObjectList(Text = "Anlagen"), UsedImplicitly]
private GuiObjectListConnector<object> _listEmailAnlage;
_listEmailAnlage = new GuiObjectListConnector<object>(this, "EmailAnlagen");
_listEmailAnlage.EnableDrop(true, true, typeof(Dokument));
Mit diesem Anweisungsblock wird der ObjectList-Control mit dem Namen "EmailAnlagen" so eingestellt, dass er Objekte des Typs "Dokument" als Drop-Target akzeptiert.
Werden nun Daten mit der Maus auf diesen Control "gedroped", bekommt die Dialogklasse eine entsprechende Nachricht vom Typ "SOGDataDropedMessageEventArgs".
Zeigt eine Drop-Operation an.
Data: Vollständige, neue Datenliste (Alte und neue Objekte)
SelectObject: Objekt, das zum Dropzeitpunkt selektiert war. (Drop-Ziel)
CopyData: true, wenn kopiert werden soll.
Drag and Drop mit Interface ISOGDragDropDataHandler
Durch Implementierung des Interfaces ISOGDragDropDataHandler kann einer Dialogklasse eine komfortable Möglichkeit zur Behandlung von Drag und Drop Events gegeben werden.
Beispiel:
In der Funktion SOGMayHandleDrop kann entschieden werden, ob die Daten, die über ein DragEvent ankommen, verarbeitet werden können.
public void SOGMayHandleDrop(object sender, SOGMayAcceptDataDropMessageEventArgs args)
Das Datenfeld "args.DragDropHandlerSource" enthält dabei den Namen der CS-Funktion, die die Liste der Daten produziert hat (und damit einen Hinweis, wohin die Daten auf der Masken gezogen werden sollen).
Das Datenfeld "args.DropToSender" ist true, wenn sich die Maus noch im Quell-Control der Drag-Operation befindet und kann genutzt werden um zu verhindern, das etwas in dem gleichen Container fallengelassen wird, aus dem es stammt.
Setzen Sie "args.Accept" auf "true" um die ankommenden Daten zu akzeptieren.
Setzen Sie "args.AllowCopy" oder "args.AllowMove" um zu signalisieren, ob Copy oder Move Operationen erlaubt sind. (Move: Die Daten werden an der Quelle gelöscht. Sonst: Copy).
In der Funktion SOGHandleDropData müssen die ankommenden Daten verarbeitet werden.
public void SOGHandleDropData(object sender, SOGDataDropedMessageEventArgs droppedArgs)
Verwenden Sie "droppedArgs.GetFileDropFiles()" um eine Liste von Dateien entgegen zu nehmen.
Setzen Sie "droppedArgs.Handled = true;" um anzuzeigen, dass die ankommenden Daten erfolgreich verarbeitet wurden. Dadurch wird z.B. bei einer Move-Operation dafür gesorgt, dass die Quelldaten gelöscht werden.
Drag and Drop mit Interface ISOGDragDropDataHandler in der SOGERPDataFactory
Die SOGERPDataFactory implementiert das Interface ISOGDragDropDataHandler!
Damit eine DragOperation jedoch auf die Factory wirkt (und nicht auf das Referenz-Datenobjekt), darf in der Konfiguration der Factory (config.basis/DataFactory_base.cfg) die Option
UseRefObject="true"
für das Listenelement nicht gesetzt sein. Die Implementierung der CS-Funktion zum Auflisten der Daten muss in der ObjectFactory erfolgen.