Aracılığıyla paylaş


Nasıl yapılır: UML Model Öğelerini IDataObject'den Alma

Kullanıcı, öğeleri herhangi bir kaynaktan diyagram üzerine sürüklediğinde, sürüklenen öğeler System.Windows.Forms.IDataObject içinde kodlanır. Kodlama, kaynak nesnenin türüne bağlıdır. Aşağıdaki bölüm, kaynak UML diyagram olduğunda öğelerin nasıl alındığını gösterir.

Not

UML modeller üzerinde yapmak zorunda olduğunuz işlemlerin çoğu, Microsoft.VisualStudio.Uml.Interfaces ve Microsoft.VisualStudio.ArchitectureTools.Extensibility derlemelerinde tanımlı türleri kullanarak gerçekleştirilebilir. Ancak bu amaç için, UML modelleme araçları uygulamasının parçaları olan bazı sınıfları kullanmanız gerekir. Örneğin, ShapeElement bu bölümde UML gibi aynı değildirIShape. UML model ve diyagramlarını tutarlı bir durumun içine koyma riskini azaltmak için, alternatifinin olmadığı yerlerde yöntemleri bu uygulama sınıfları üzerinde kullanmaktan kaçınmak daha iyidir.

Örnek Kod

Projeniz aşağıdaki .NET derlemelerine başvurmalıdır:

Microsoft.VisualStudio.Modeling.Sdk.10.0

Microsoft.VisualStudio.Modeling.Sdk.Diagrams.10.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 modelleme araçlarının uygulandığı ElementGroupPrototype ve Store hakkında daha fazla bilgi için bkz. Domain-Specific Languages.

Ayrıca bkz.

Kavramlar

UML API ile Programlama

Nasıl yapılır: Modelleme Diyagramında Menü Komutu Tanımlama