Aracılığıyla paylaş


Windows Forms Tabanlı Etki Alanına Özgü Dil Oluşturma

DSL diyagramı kullanmak yerine etki alanına özgü dil (DSL) modelinin durumunu görüntülemek için Windows Forms'ı kullanabilirsiniz. Bu konu başlığı altında, Visual Studio Görselleştirme ve Modelleme SDK'sını kullanarak Bir Windows Formunu DSL'ye bağlama işlemi adım adım açıklanmaktadır.

Aşağıdaki görüntüde dsl örneğinin Windows Form kullanıcı arabirimi ve model gezgini gösterilmektedir:

DSL instance in Visual Studio

Windows Forms DSL oluşturma

Minimum WinForm Tasarım Aracı DSL şablonu, kendi gereksinimlerinize uygun olarak değiştirebileceğiniz minimum bir DSL oluşturur.

  1. Minimum WinForm Tasarım Aracı şablonundan DSL oluşturun.

    Bu kılavuzda, aşağıdaki adlar varsayılır:

    • Çözüm ve DSL adı: FarmApp
    • Ad Alanı: Company.FarmApp
  2. Şablonun sağladığı ilk örnekle deneme yapın:

    1. Tüm Şablonları Dönüştür'ü seçin.

    2. Örneği derleyin ve çalıştırın (Ctrl+F5).

    3. Visual Studio'nun deneysel örneğinde, dosyayı hata ayıklama projesinde açın Sample .

      Windows Forms denetiminde görüntülendiğine dikkat edin.

      Modelin öğelerini Gezgin'de de görebilirsiniz.

      Forma veya Gezgin'e bazı öğeler ekleyin ve diğer ekranda göründüklerine dikkat edin.

    Visual Studio'nun ana örneğinde DSL çözümü hakkında aşağıdaki noktalara dikkat edin:

  • DslDefinition.dsl diyagram öğesi içermez. Bunun nedeni, bu DSL'nin örnek modellerini görüntülemek için DSL diyagramlarını kullanmamanızdır. Bunun yerine, modele bir Windows Formu bağlarsınız ve formdaki öğeler modeli görüntüler.

  • ve DslPackage projelerine Dsl ek olarak, çözüm, Windows Forms denetiminin tanımını içeren UI projesi adlı UI.üçüncü bir proje içerir. DslPackageUIöğesine UI ve öğesine bağlıdırDsl.

  • Projede DslPackage , UI\DocView.cs projede tanımlanan UI Windows Forms denetimini görüntüleyen kodu içerir.

  • Proje, DSL'ye UI bağlı bir form denetiminin çalışma örneğini içerir. Ancak, DSL Tanımını değiştirdiğinizde çalışmaz. Proje UI aşağıdakileri içerir:

    • adlı ModelViewControlbir Windows Forms sınıfı.

    • ek kısmi tanımını ModelViewControliçeren adlı DataBinding.cs bir dosya. İçeriğini görmek için Çözüm Gezgini dosyasının kısayol menüsünü açın ve Kodu Görüntüle'yi seçin.

Kullanıcı arabirimi projesi hakkında

DSL Tanım dosyasını kendi DSL'nizi tanımlayacak şekilde güncelleştirdiğinizde, DSL'nizi görüntülemek için projedeki UI denetimi güncelleştirmeniz gerekir. ve projelerinden Dsl farklı olarak, örnek UI proje öğesinden DslDefinitionl.dsloluşturulmaz.DslPackage İsterseniz kodu oluşturmak için .tt dosyaları ekleyebilirsiniz, ancak bu kılavuzda ele alınmamıştır.

DSL tanımını güncelleştirme

Aşağıdaki görüntü, bu kılavuzda kullanılan DSL tanımıdır.

DSL definition

  1. DSL tasarımcısında DslDefinition.dsl dosyasını açın.

  2. ExampleElement Öğesini Sil

  3. ExampleModel etki alanı sınıfını olarak Farmyeniden adlandırın.

    Buna Int32 türünde ve IsOrganic Boole türünde ek etki alanı özellikleri Sizeverin.

    Not

    Kök etki alanı sınıfını siler ve sonra yeni bir kök oluşturursanız Düzenleyici Kök Sınıfı özelliğini sıfırlamanız gerekir. DSL Gezgini'nde Düzenleyici'yi seçin. Ardından Özellikler penceresi Kök Sınıfı olarak Farmayarlayın.

  4. Aşağıdaki etki alanı sınıflarını oluşturmak için Adlandırılmış Etki Alanı Sınıfı aracını kullanın:

    • Field - Buna adlı Sizeek bir etki alanı özelliği verin.

    • Animal- Özellikler penceresi Devralma Değiştirici'yi Soyut olarak ayarlayın.

    Not

    Adlandırılmış Etki Alanı Sınıfı aracı ve bu bölümde bahsedilen diğer araçlar Araç Kutusu araç penceresinde bulunur. Bu pencereyi Görünüm>Araç Kutusu ile açabilir veya gizleyebilirsiniz.

  5. Aşağıdaki sınıfları oluşturmak için Etki Alanı Sınıfı aracını kullanın:

    • Sheep

    • Goat

  6. Devralma aracını kullanarak öğesini yapın Goat ve Sheep öğesinden Animaldevralın.

  7. eklemek ve Animal altına Farmeklemek Field için Ekleme aracını kullanın.

  8. Diyagramı düzenlemek isteyebilirsiniz. Yinelenen öğe sayısını azaltmak için yaprak öğelerin kısayol menüsündeki Alt Ağacı Buraya Getir komutunu kullanın.

  9. Çözüm Gezgini araç çubuğundaki Tüm Şablonları Dönüştür'ü seçin.

  10. Dsl projesini oluşturun.

    Not

    Bu aşamada, diğer projeler hatasız derlenmez. Ancak Dsl projesini derlemesinin Veri Kaynağı Sihirbazı'nda kullanılabilir olması için oluşturmak istiyoruz.

Kullanıcı arabirimi projesini güncelleştirme

Artık DSL modelinde depolanan bilgileri görüntüleyen yeni bir kullanıcı denetimi oluşturabilirsiniz. Kullanıcı denetimini modele bağlamanın en kolay yolu veri bağlamalarıdır. ModelingBindingSource adlı veri bağlama bağdaştırıcı türü, DLL'leri VMSDK olmayan arabirimlere bağlamak için özel olarak tasarlanmıştır.

DSL modelinizi veri kaynağı olarak tanımlama

  1. Veri menüsünde Veri Kaynaklarını Göster'i seçin.

    Veri Kaynakları penceresi açılır.

    Yeni Veri Kaynağı Ekle'yi seçin. Veri Kaynağı Yapılandırma Sihirbazı açılır.

  2. Nesne, İleri'yi seçin.

    Dsl, Company.FarmApp'i genişletin ve modelinizin kök sınıfı olan Grup'a tıklayın. Son'u seçin.

    Çözüm Gezgini'de kullanıcı arabirimi projesi artık Properties\DataSources\Farm.datasource içerir

    Model sınıfınızın özellikleri ve ilişkileri Veri Kaynakları penceresinde görüntülenir.

    Data sources window

Modelinizi forma Bağlan

  1. UI projesinde, var olan tüm .cs dosyalarını silin.

  2. Kullanıcı arabirimi projesine adlı FarmControl yeni bir Kullanıcı Denetimi dosyası ekleyin.

  3. Veri Kaynakları penceresindeki Grup açılır menüsünde Ayrıntılar'ı seçin.

    Diğer özellikler için varsayılan ayarları değiştirmeyin.

  4. Tasarım görünümünde FarmControl.cs dosyasını açın.

    Grup'a Veri Kaynakları penceresinden FarmControl'e sürükleyin.

    Her özellik için bir denetim kümesi görüntülenir. İlişki özellikleri denetim oluşturmaz.

  5. farmBindingNavigator'ı silin. Bu da tasarımcıda FarmControl otomatik olarak oluşturulur, ancak bu uygulama için kullanışlı değildir.

  6. Araç kutusunu kullanarak iki DataGridView örneği oluşturun ve bunları AnimalGridView ve FieldGridViewolarak adlandırın.

    Not

    Alternatif bir adım, Veri Kaynakları penceresindeki Hayvanlar ve Alanlar öğelerini denetime sürüklemektir. Bu eylem, kılavuz görünümü ile veri kaynağı arasında otomatik olarak veri kılavuzları ve bağlamalar oluşturur. Ancak, bu bağlama DLL'ler için düzgün çalışmıyor. Bu nedenle, veri kılavuzlarını ve bağlamalarını el ile oluşturmak daha iyidir.

  7. Araç Kutusu ModelingBindingSource aracını içermiyorsa ekleyin. Veri sekmesinin kısayol menüsünde Öğeleri Seç'i seçin. Araç Kutusu Öğelerini Seç iletişim kutusunda .NET Framework sekmesinden ModelingBindingSource'u seçin.

  8. Araç Kutusu'nu kullanarak ModelingBindingSource'un iki örneğini oluşturun ve bunları AnimalBinding ve FieldBindingolarak adlandırın.

  9. Her ModelingBindingSource'un DataSource özelliğini farmBindingSource olarak ayarlayın.

    DataMember özelliğini Hayvanlar veya Alanlar olarak ayarlayın.

  10. DataSource özelliklerini AnimalGridView olarak AnimalBindingve için FieldGridView FieldBindingolarak ayarlayın.

  11. Grup denetiminin düzenini zevkinize göre ayarlayın.

    ModelingBindingSource, DLL'lere özgü çeşitli işlevler gerçekleştiren bir bağdaştırıcıdır:

  • Bir VMSDK Depolama İşlemindeki güncelleştirmeleri sarmalar.

    Örneğin, kullanıcı veri görünümü kılavuzundan bir satırı sildiğinde, normal bir bağlama işlem özel durumuyla sonuçlanır.

  • Kullanıcı bir satır seçtiğinde, Özellikler penceresi veri kılavuzu satırı yerine ilgili model öğesinin özelliklerini görüntülemesini sağlar.

    Schema of the DSL binding

    Veri kaynakları ve görünümler arasındaki bağlantıların şeması.

DSL'ye bağlamaları tamamlama

  1. Kullanıcı arabirimi projesinde ayrı bir kod dosyasına aşağıdaki kodu ekleyin:

    using System.ComponentModel;
    using Microsoft.VisualStudio.Modeling;
    using Microsoft.VisualStudio.Modeling.Design;
    
    namespace Company.FarmApp
    {
      partial class FarmControl
      {
        public IContainer Components { get { return components; } }
    
        /// <summary>Binds the WinForms data source to the DSL model.
        /// </summary>
        /// <param name="nodelRoot">The root element of the model.</param>
        public void DataBind(ModelElement modelRoot)
        {
          WinFormsDataBindingHelper.PreInitializeDataSources(this);
          this.farmBindingSource.DataSource = modelRoot;
          WinFormsDataBindingHelper.InitializeDataSources(this);
        }
      }
    }
    
  2. DslPackage projesinde DslPackage\DocView.tt'ı düzenleyerek aşağıdaki değişken tanımını güncelleştirin:

    string viewControlTypeName = "FarmControl";
    

DSL'yi test edin

DSL çözümü artık derlenip çalıştırılabilir, ancak daha sonra daha fazla geliştirme eklemek isteyebilirsiniz.

  1. Çözümü derleyin ve çalıştırın.

  2. Visual Studio'nun deneysel örneğinde Örnek dosyasını açın.

  3. FarmApp Explorer'da, Grup kök düğümünde kısayol menüsünü açın ve Yeni Keçi Ekle'yi seçin.

    Goat1Hayvanlar görünümünde görünür.

    Uyarı

    Hayvanlar düğümünde değil, Grup düğümünde kısayol menüsünü kullanmanız gerekir.

  4. Grup kök düğümünü seçin ve özelliklerini görüntüleyin.

    Form görünümünde, grubun Adını veya Boyutunu değiştirin.

    Formdaki her alandan uzaklaştığınızda, ilgili özellik Özellikler penceresi değişir.

DSL'yi geliştirme

Özelliklerin hemen güncelleştirildiğinden emin olun

  1. FarmControl.cs dosyasının tasarım görünümünde Ad, Boyut veya IsOrganic gibi basit bir alan seçin.

  2. Özellikler penceresi DataBindings'i genişletin ve (Gelişmiş) öğesini açın.

    Biçimlendirme ve Gelişmiş Bağlama iletişim kutusundaki Veri Kaynağı Güncelleştirme Modu altında OnPropertyChanged öğesini seçin.

  3. Çözümü derleyin ve çalıştırın.

    Alanın içeriğini değiştirdiğinizde, Grup modelinin ilgili özelliğinin hemen değiştiğini doğrulayın.

Ekle düğmesi sağla

  1. FarmControl.cs dosyasının tasarım görünümünde araç kutusunu kullanarak formda bir düğme oluşturun.

    Düğmenin adını ve metnini , örneğin olarak New Sheepdüzenleyin.

  2. Düğmenin arkasındaki kodu açın (örneğin, çift tıklayarak).

    Aşağıdaki gibi düzenleyin:

    private void NewSheepButton_Click(object sender, EventArgs e)
    {
      using (Transaction t = farm.Store.TransactionManager.BeginTransaction("Add sheep"))
      {
        elementOperations.MergeElementGroup(farm,
          new ElementGroup(new Sheep(farm.Partition)));
        t.Commit();
      }
    }
    
    // The following code is shared with other add buttons:
    private ElementOperations operationsCache = null;
    private ElementOperations elementOperations
    {
      get
      {
        if (operationsCache == null)
        {
          operationsCache = new ElementOperations(farm.Store, farm.Partition);
        }
        return operationsCache;
      }
    }
    private Farm farm
    {
      get { return this.farmBindingSource.DataSource as Farm; }
    }
    

    Aşağıdaki yönergeyi de eklemeniz gerekir:

    
    using Microsoft.VisualStudio.Modeling;
    
  3. Keçiler ve Alanlar için benzer düğmeler ekleyin.

  4. Çözümü derleyin ve çalıştırın.

  5. Yeni düğmenin bir öğe eklediğini doğrulayın. Yeni öğe hem FarmApp Explorer'da hem de uygun veri kılavuzu görünümünde görünmelidir.

    Veri kılavuzu görünümünde öğenin adını düzenleyebilmeniz gerekir. Buradan da silebilirsiniz.

    Sample data grid view

Öğe ekleme kodu hakkında

Yeni öğe düğmeleri için aşağıdaki alternatif kod biraz daha basittir.

private void NewSheepButton_Click(object sender, EventArgs e)
{
  using (Transaction t = farm.Store.TransactionManager.BeginTransaction("Add sheep"))
  {
    farm.Animals.Add(new Sheep(farm.Partition)); ;
    t.Commit();
  }
}

Ancak, bu kod yeni öğe için varsayılan bir ad ayarlamaz. DSL'nin Öğe Birleştirme Yönergelerinde tanımlamış olabileceğiniz herhangi bir özelleştirilmiş birleştirmeyi çalıştırmaz ve tanımlanmış olabilecek herhangi bir özel birleştirme kodu çalıştırmaz.

Bu nedenle, yeni öğeler oluşturmak için kullanmanızı ElementOperations öneririz. Daha fazla bilgi için bkz . Öğe Oluşturma ve Taşımayı Özelleştirme.