Aracılığıyla paylaş


Nasıl yapılır: bir etki alanına özgü dilde standart bir menü komutu değiştirmek

dsl otomatik olarak tanımlanan standart komutlardan bazıları davranışını değiştirebilirsiniz.Örneğin, değiştirebilir Kes , böylece önemli bilgileri içermez.Bunu yapmak için bir komut kümesi sınıf yöntemleri geçersiz kılar.Bu sınıflar DslPackage proje CommandSet.cs dosyasında tanımlanmıştır ve den türetilen CommandSet.

Özet olarak bir komutu değiştirmek için:

  1. Hangi değişiklik yapabileceğiniz komutları keşfedin.

  2. Uygun komut kümesi sınıfının kısmi bir bildirimi.

  3. ProcessOnStatus ve ProcessOnMenu yöntemlerini geçersiz kılma komut.

Bu konu, bu yordamı açıklar.

[!NOT]

Kendi menü komutlarını oluşturmak istiyorsanız, bkz: Nasıl yapılır: kısayol menüsüne komut ekleme.

Hangi komutları değiştirebilir mi?

Keşfetmek için hangi komutları değiştirebilirsiniz

  1. De DslPackage proje, açık GeneratedCode\CommandSet.cs.Bu C# dosya Solution Explorer'da bağlı kuruluşu bulunabilir CommandSet.tt.

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

  3. Her komut kümesi sınıf "override" bir boşluk bırakın.IntelliSense, geçersiz kılabilirsiniz yöntemlerinin listesini gösterir.Her komut adları başlamak yöntemleri çifti olan "ProcessOnStatus"ve"ProcessOnMenu".

  4. Sınıfları kümesi, komutun Not değiştirmek istediğiniz komutu içeren.

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

    [!NOT]

    Normalde, kayıt defterinde oluşturulan dosyaları düzenlememelisiniz.Dosyaları oluşturulan bir sonraki açışınızda tüm düzenlemeler kaybolur.

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

Bir komut kümesi sınıfının kısmi bildirimi içeren yeni bir dosya oluşturun.

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

  1. Solution Explorer'da, DslPackage proje GeneratedCode klasörünü açın ve CommandSet.tt altında arayın ve CommandSet.cs ile oluşturulan dosya açın.Ad ve orada tanımlanan birinci sınıf adını not alın.Örneğin, görebilirsiniz:

    namespace Company.Language1

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

  2. De DslPackage, özel kod adlı bir klasör oluşturun.Bu klasörde adlı yeni bir sınıf oluşturarak CommandSet.cs.

  3. Yeni dosyasında aynı ad alanına ve ada oluşturulmuş kısmi sınıfı olan bir kısmi bildirimi 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 sınıf dosyası şablonu yeni dosyayı oluşturmak için kullanılan, hem ad hem de sınıf adı düzeltmeniz gerekir.

Command yöntemleri geçersiz kılmak

Komutların çoğu ilişkili iki yöntemi vardır: bir ad yöntemiyle ister ProcessOnStatus...komut görünür ve etkin olup olmayacağını belirler.Diyagram kullanıcı tıklattığında her çağrılmasını hızlı bir şekilde yürütmek ve hiçbir değişiklik.ProcessOnMenu...Kullanıcı tıklattığında komut ve komutun işlevi gerçekleştirmeniz gerekir denir.Biri veya bu yöntemlerin her ikisini de geçersiz kılmak isteyebilirsiniz.

Dd820672.collapse_all(tr-tr,VS.110).gifKomut bir menü görüntülendiğinde değiştirmek için

ProcessOnStatus geçersiz kıl...yöntem.Bu yöntem, Visible ayarlamanız gerekir ve onun parametresi MenuCommand özelliklerinin etkinleştirilmiş.Genellikle bu komutu görünür.Komutu seçili öğeleri için geçerlidir ve ayrıca bunların özelliklerini komutu geçerli durumlarında uygulanabilir olup olmadığını belirlemek için bakmak olup olmadığını belirlemek için CurrentSelection.

Hangi öğeleri tarafından seçilir, genel bir kılavuz olarak Visible özelliğini belirlenmesi.Komut siyah veya gri menüsünde görüntülenip görüntülenmeyeceğini belirler, Enabled özelliğini, geçerli seçimin durumuna bağımlı olmalıdır.

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

[!NOT]

Bu yöntem, komut tuş vuruşu kullanılabilir olup olmadığını etkilemez.Örneğin, Sil menü öğesini devre dışı bırakma komutu Delete tuşuyla çağrılan 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;
  }
}

İyi bir temel yöntemini çağırın, tüm servis talepleri ve ayarları ile endişe değil uygulamadır.

ProcessOnStatus yöntemi değil oluşturun, silin veya deposundaki öğeler güncelleştirin.

Dd820672.collapse_all(tr-tr,VS.110).gifKomutu davranışını değiştirmek için

ProcessOnMenu geçersiz kıl...yöntem.Aşağıdaki örnek, kullanıcı bile Delete tuşuna basarak bir kerede birden fazla öğe 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();
  }
}

Kodunuzu oluşturma, silme veya öğeleri veya bağlantıları güncelleştirme gibi deposuna değişiklikler yaparsa, bir işlem içinde yapmalısınız.Daha fazla bilgi için bkz. Nasıl yapılır: bir etki alanına özgü dilde standart bir menü komutu değiştirmek.

Dd820672.collapse_all(tr-tr,VS.110).gifYöntemlerin kodunu yazma

Bu yöntemler içinde sıklıkla yararlı aşağıdaki parçaları şunlardır:

  • this.CurrentSelection.Kullanıcı sağ tıklattığınız şeklin şekilleri ve bağlayıcıları, bu listede her zaman dahil edilir.Diyagram kullanıcı boş bir diyagram parçası üzerinde tıklarsa, liste tek üyesidir.

  • this.IsDiagramSelected() - trueKullanıcı boş bir diyagram parçası tıklattıysanız.

  • this.IsCurrentDiagramEmpty()

  • this.IsSingleSelection()-Kullanıcı birden çok şekil seçin.

  • this.SingleSelection-Şekil veya kullanıcı sağ tıklattığınız diyagramı

  • shape.ModelElement as MyLanguageElement-Şekil tarafından temsil edilen model öğesi.

Nasıl öğesi öðenin gidin ve nesneler ve bağlantılar oluşturma hakkında daha fazla bilgi için bkz: Gezinme ve Program kodunda bir modeli güncelleştiriliyor.

Ayrıca bkz.

Görevler

Nasıl yapılır: kısayol menüsüne komut ekleme

[yönlendirme] İzlenecek yol: Seçili bir bağlantıdan bilgileri alınıyor

Başvuru

MenuCommand

Kavramlar

Nasıl VSPackages IDE kullanıcı arabirimi öğeleri eklemek

vsct xml şema başvurusu

Diğer Kaynaklar

Bir etki alanına özgü dil kişiselleştirmek için kod yazma

Visual Studio komut tablosu (.Vsct) dosyaları

vmsdk – devre diyagramları örnek. Kapsamlı dsl özelleştirme

örnek kodları: devre diyagramları