建議使用 Visual Studio 2017

在 Windows Form 中內嵌圖表

 

發行︰ 2016年7月

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

DSL 圖表嵌入 Windows 控制項,它會出現在Visual Studio視窗。

若要將 DSL 圖表嵌入 Windows 控制項

  1. 加入新使用者控制項DslPackage 專案的檔案。

  2. 將面板控制項新增至使用者控制項。 此面板會包含 DSL 圖表。

    將您需要其他控制項。

    設定控制項的錨點屬性。

  3. 在 [方案總管] 中,以滑鼠右鍵按一下使用者控制項檔案,然後按一下檢視程式碼。 新增此建構函式和變數的程式碼︰

    
    internal UserControl1(MyDSLDocView docView, Control content)  
      : this()  
    {  
      panel1.Controls.Add(content);  
      this.docView = docView;  
    }  
    private MyDSLDSLDocView docView;  
    
    
    
  4. 將新檔案加入至 DslPackage 專案中,使用下列內容︰

    using System.Windows.Forms;  
    namespace Company.MyDSL  
    {  
      partial class MyDSLDocView  
      {  
        private UserControl1 container;  
        public override IWin32Window Window  
        {  
          get  
          {  
            if (container == null)  
            {  
              // Put our own form inside the DSL window:  
              container = new UserControl1(this,  
                (Control)base.Window);  
            }  
            return container;  
    } } } }  
    
    
    
  5. 若要測試 DSL,按 F5 並開啟範例模型檔案。 圖表會出現在控制項中。 [工具箱] 和其他功能可以正常運作。

更新使用儲存事件表單

  1. 在表單設計工具中,加入ListBox名為listBox1。 這會在模型中顯示的項目清單。 它將會保留在模型使用 synchronism儲存事件。 如需詳細資訊,請參閱事件處理常式傳播變更外部模型

  2. 在自訂程式碼檔案中,覆寫進一步 DocView 類別方法︰

    
    partial class MyDSLDocView  
    {  
     /// <summary>  
     /// Register store event listeners.  
     /// This method is called when the model and diagram    
     /// have completed loading.   
     /// </summary>  
     protected override bool LoadView()  
      {  
        bool result = base.LoadView();  
        Store store = this.DocData.Store;  
        EventManagerDirectory emd = store.EventManagerDirectory;  
        DomainClassInfo componentClass = store.DomainDataDirectory.FindDomainClass(typeof(ExampleElement));  
        emd.ElementAdded.Add(componentClass, new EventHandler<ElementAddedEventArgs>(AddElement));  
        emd.ElementDeleted.Add(componentClass, new EventHandler<ElementDeletedEventArgs>(RemoveElement));  
    
        // Do the initial parts list:  
        container.SetUpFormFromModel();  
        return result;  
      }  
     /// <summary>  
     /// Listener method called on creation of each instance of   
     /// the ExampleElement class or its subclasses.  
     /// </summary>  
     private void AddElement(object sender, ElementAddedEventArgs e)  
     {  
       container.Add(e.ModelElement as ExampleElement);  
     }  
     /// <summary>  
     /// Listener method called after deletion of each instance of   
     /// the ExampleElement class or its subclasses.  
     /// </summary>  
     private void RemoveElement(object sender, ElementDeletedEventArgs e)  
     {  
       container.Remove(e.ModelElement as ExampleElement);  
     }  
    
    
    
  3. 在使用者控制項的程式碼,插入接聽的項目加入和移除方法︰

    
          public partial class UserControl1 : UserControl { ...  
    
    private ExampleModel modelRoot;  
    
    internal void Add(ExampleElement e) { UpdatePartsList(); }  
    internal void Remove(ExampleElement e) { UpdatePartsList(); }  
    
    internal void SetUpFormFromModel()  
    {  
      modelRoot = this.docView.CurrentDiagram.ModelElement as ExampleModel;  
      UpdatePartsList();  
    }  
    
    private void UpdatePartsList()  
    {  
      StringBuilder builder = new StringBuilder();  
      listBox1.Items.Clear();  
      foreach (ExampleElement c in modelRoot.Elements)  
      {  
        listBox1.Items.Add(c.Name);  
      }  
    }  
    
    
    
  4. 若要測試 DSL,請按 F5,在實驗性執行個體Visual Studio,開啟範例模型檔案。

    請注意,清單方塊會在模型中,顯示的項目清單,並確認它正確之後任何新增或刪除,以及復原與取消復原之後。

巡覽和更新程式碼中的模型
撰寫程式碼來自訂定義域專屬語言

顯示: