共用方式為


HOW TO:從 IDataObject 取得 UML 模型項目

當使用者將任何來源的項目拖曳至圖表上時,拖曳的項目會以 System.Windows.Forms.IDataObject 編碼。此編碼取決於來源物件的類型。下列片段示範如何在來源是 UML 圖表的情況下擷取項目。

注意事項注意事項

您必須在 UML 模型上執行的大部分作業,都可以使用 Microsoft.VisualStudio.Uml.InterfacesMicrosoft.VisualStudio.ArchitectureTools.Extensibility 組件中定義的型別執行。但為達此目的,您必須使用某些屬於 UML 模型工具之實作的類別。例如,假設此片段中的 ShapeElement 與 UML IShape 不同。若要降低造成 UML 模型和圖表狀態不一致的風險,最好避免使用這些實作類別的方法,除非沒有其他的選擇。

程式碼範例

您的專案必須參考下列 .NET 組件:

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;
          }
        });
    }

若想進一步了解用以實作 UML 模型工具的 ElementGroupPrototype 與 Store,請參閱 Visualization and Modeling SDK - 網域指定的語言

請參閱

概念

使用 UML API 進行程式設計

HOW TO:在模型圖表上定義功能表命令