Sdílet prostřednictvím


Jak: získat z IDataObject prvky modelu UML

Když uživatel přetáhne prvky z libovolného zdroje do diagramu, přetažených prvků jsou zakódovány v System.Windows.Forms.IDataObject.Kódování závisí na typ zdrojového objektu.Následující fragment demonstruje načtení prvky, pokud je zdroj UML diagram.

[!POZNÁMKA]

Většina operací, které mají na modely UML lze provést pomocí typů v definovaných v sestavení Microsoft.VisualStudio.Uml.Interfaces a Microsoft.VisualStudio.ArchitectureTools.Extensibility.Ale pro tento účel je nutné použít některé třídy, které jsou součástí provádění nástroje modelování UML.Například ShapeElement v tomto fragmentu není stejné jako UML IShape.Chcete-li snížit riziko uvedení modelu UML a diagramů do nekonzistentním stavu, je lepší se vyhnout použití metod na tyto implementace třídy, kromě případů, kdy neexistuje žádná alternativa.

Ukázka kódu

Projekt musí odkazovat na následující .NET sestavení:

Microsoft.VisualStudio.Modeling.Sdk.11.0

Microsoft.VisualStudio.Modeling.Sdk.Diagrams.11.0

System.Windows.Forms

using Microsoft.VisualStudio.Modeling;  
  // for ElementGroupPrototype
using Microsoft.VisualStudio.Modeling.Diagrams;  
  // for ShapeElement, DiagramDragEventArgs, DiagramPointEventArgs
… 
  /// <summary>
  /// Retrieves UML IElements from drag arguments.
  /// Works for drags from UML diagrams.
  /// </summary>
  private IEnumerable<IElement> GetModelElementsFromDragEvent
                  (DiagramDragEventArgs dragEvent)
  {
     //ElementGroupPrototype is the container for
     //dragged and copied elements and toolbox items.
     ElementGroupPrototype prototype =
        dragEvent.Data.
        GetData(typeof(ElementGroupPrototype))
                     as ElementGroupPrototype;
     // Locate the originals in the implementation store.
     IElementDirectory implementationDirectory = 
        dragEvent.DiagramClientView.Diagram.Store.ElementDirectory;
     
     return  prototype.ProtoElements.Select(
       prototypeElement => 
       {
          ModelElement element = implementationDirectory
                .FindElement(prototypeElement.ElementId);
          ShapeElement shapeElement = element as ShapeElement;
          if (shapeElement != null)
          { 
            // Dragged from a diagram.
            return shapeElement.ModelElement as IElement;
          }
          else
          { 
            // Dragged from UML Model Explorer.
            return element as IElement;
          }
        });
    }

Další informace o ElementGroupPrototype a Store ve kterém jsou implementovány nástroje modelování UML, viz Vizualizace a modelování SDK - jazyky specifické pro doménu.

Viz také

Koncepty

Programování v rozhraní API UML

Postup: definování příkazu nabídky diagramu modelování