Aracılığıyla paylaş


Alana Özgü bir Dilde Standart Menü Komutunu Değiştirme

DSL'nizde otomatik olarak tanımlanan bazı standart komutların davranışını değiştirebilirsiniz. Örneğin, hassas bilgileri dışlamaması için Kes'i değiştirebilirsiniz. Bunu yapmak için bir komut kümesi sınıfındaki yöntemleri geçersiz kılarsınız. Bu sınıflar, DslPackage projesindeki CommandSet.cs dosyasında tanımlanır ve dosyasından CommandSettüretilir.

Not

Kendi menü komutlarınızı oluşturmak istiyorsanız bkz . Nasıl yapılır: Kısayol Menüsüne Komut Ekleme.

Hangi komutları değiştirebilirsiniz?

Değiştirebileceğiniz komutları keşfetmek için

  1. Projede DslPackage dosyasını açın GeneratedCode\CommandSet.cs. Bu C# dosyası, Çözüm Gezgini'nin yan kuruluşu CommandSet.ttolarak bulunabilir.

  2. Bu dosyada adları "CommandSet" ile biten sınıflar bulun, örneğin Language1CommandSet ve Language1ClipboardCommandSet.

  3. Her komut kümesi sınıfına "override" yazın ve ardından bir boşluk ekleyin. IntelliSense, geçersiz kılabileceğiniz yöntemlerin listesini gösterir. Her komutun adları "" veProcessOnMenu "ProcessOnStatus" olarak başlayan bir yöntem çifti vardır.

  4. Komut kümesi sınıflarından hangisinde değiştirmek istediğiniz komutun bulunduğuna dikkat edin.

  5. Düzenlemelerinizi kaydetmeden dosyayı kapatın.

    Not

    Normalde, oluşturulan dosyaları düzenlememelisiniz. Dosyalar bir sonraki oluşturulışında tüm düzenlemeler kaybolur.

Uygun komut kümesi sınıfını genişletme

Komut kümesi sınıfının kısmi bildirimini içeren yeni bir dosya oluşturun.

Command Set sınıfını genişletmek için

  1. Çözüm Gezgini DslPackage projesinde GeneratedCode klasörünü açın ve ardından CommandSet.tt'nin altına bakın ve oluşturulan CommandSet.cs dosyasını açın. Ad alanını ve burada tanımlanan ilk sınıfın adını not edin. Örneğin, şunları görebilirsiniz:

    namespace Company.Language1

    { ... internal partial class Language1CommandSet : ...

  2. DslPackage'da Özel Kod adlı bir klasör oluşturun. Bu klasörde adlı CommandSet.csyeni bir sınıf dosyası oluşturun.

  3. Yeni dosyada, oluşturulan kısmi sınıfla aynı ad alanına ve ada sahip kısmi bir bildirim yazın. Örneğin:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.Design;
    namespace Company.Language1 /* Make sure this is correct */
    { internal partial class Language1CommandSet { ...
    

    Not

    Yeni dosyayı oluşturmak için sınıf dosyası şablonunu kullandıysanız, hem ad alanını hem de sınıf adını düzeltmeniz gerekir.

Komut yöntemlerini geçersiz kılma

Çoğu komutun ilişkili iki yöntemi vardır: ... gibi ProcessOnStatusbir ada sahip yöntem. komutun görünür ve etkin olup olmayacağını belirler. Kullanıcı diyagrama sağ tıkladığından çağrılır ve hızlı bir şekilde yürütülür ve hiçbir değişiklik yapılmaz. ProcessOnMenu... , kullanıcı komuta tıkladığında çağrılır ve komutun işlevini gerçekleştirmelidir. Bu yöntemlerden birini veya her ikisini geçersiz kılmak isteyebilirsiniz.

Menüde komut görüntülendiğinde değiştirmek için

ProcessOnStatus'ı geçersiz kıl... Yöntem. Bu yöntem, MenuCommand parametresinin Visible ve Enabled özelliklerini ayarlamalıdır. Komut genellikle buna bakar. Komutun seçili öğeler için geçerli olup olmadığını belirlemek için CurrentSelection ve ayrıca komutun geçerli durumlarına uygulanıp uygulanamayacağını belirlemek için özelliklerine bakabilir.

Genel bir kılavuz olarak, Visible özelliği hangi öğelerin seçildiğine göre belirlenmelidir. Komutun menüde siyah mı yoksa gri mi görüneceğini belirleyen Enabled özelliği, seçimin geçerli durumuna bağlı olmalıdır.

Aşağıdaki örnek, kullanıcı birden fazla şekil seçtiğinde Sil menü öğesini devre dışı bırakır.

Not

Bu yöntem, komutun bir tuş vuruşu aracılığıyla kullanılabilir olup olmadığını etkilemez. Örneğin, Sil menü öğesini devre dışı bırakmak komutun Delete tuşuyla çağrılmasını engellemez.

/// <summary>
/// Called when user right-clicks on the diagram or clicks the Edit menu.
/// </summary>
/// <param name="command">Set Visible and Enabled properties.</param>
protected override void ProcessOnStatusDeleteCommand (MenuCommand command)
{
  // Default settings from the base method.
  base.ProcessOnStatusDeleteCommand(command);
  if (this.CurrentSelection.Count > 1)
  {
    // If user has selected more than one item, Delete is greyed out.
    command.Enabled = false;
  }
}

İlk olarak temel yöntemi çağırmak, ilgilenmediğiniz tüm servis taleplerini ve ayarları ele almak için iyi bir uygulamadır.

ProcessOnStatus yöntemi, Mağaza'da öğe oluşturmamalı, silmemeli veya güncelleştirmemelidir.

Komutun davranışını değiştirmek için

ProcessOnMenu geçersiz kılın... Yöntem. Aşağıdaki örnek, Delete tuşunu kullanarak bile kullanıcının aynı anda birden fazla öğeyi silmesini engeller.

/// <summary>
/// Called when user presses Delete key
/// or clicks the Delete command on a menu.
/// </summary>
protected override void ProcessOnMenuDeleteCommand()
{
  // Allow users to delete only one thing at a time.
  if (this.CurrentSelection.Count <= 1)
  {
    base.ProcessOnMenuDeleteCommand();
  }
}

Kodunuz Mağaza'da öğe veya bağlantı oluşturma, silme veya güncelleştirme gibi değişiklikler yaparsa, bunu bir işlem içinde yapmanız gerekir. Daha fazla bilgi için bkz . Model öğeleri oluşturma ve güncelleştirme.

Yöntemlerin kodunu yazma

Aşağıdaki parçalar genellikle bu yöntemler içinde yararlıdır:

  • this.CurrentSelection. Kullanıcının sağ tıklandığı şekil her zaman bu şekiller ve bağlayıcılar listesine eklenir. Kullanıcı diyagramın boş bir bölümüne tıklarsa, diyagram listenin tek üyesidir.

  • this.IsDiagramSelected() - true kullanıcı diyagramın boş bir bölümüne tıkladıysa.

  • this.IsCurrentDiagramEmpty()

  • this.IsSingleSelection() - kullanıcı birden çok şekil seçmedi

  • this.SingleSelection - kullanıcının sağ tıklandığı şekil veya diyagram

  • shape.ModelElement as MyLanguageElement - bir şekille temsil edilen model öğesi.

öğesinden öğesine nasıl gidilip nesne ve bağlantı oluşturma hakkında daha fazla bilgi için bkz . Program Kodunda Model Gezinme ve Güncelleştirme.