Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Projede
DslPackagedosyasını açınGeneratedCode\CommandSet.cs. Bu C# dosyası, Çözüm Gezgini'nin yan kuruluşuCommandSet.ttolarak bulunabilir.Bu dosyada adları "
CommandSet" ile biten sınıflar bulun, örneğinLanguage1CommandSetveLanguage1ClipboardCommandSet.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.Komut kümesi sınıflarından hangisinde değiştirmek istediğiniz komutun bulunduğuna dikkat edin.
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
Çö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 : ...DslPackage'da Özel Kod adlı bir klasör oluşturun. Bu klasörde adlı
CommandSet.csyeni bir sınıf dosyası oluşturun.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()-truekullanıcı diyagramın boş bir bölümüne tıkladıysa.this.IsCurrentDiagramEmpty()this.IsSingleSelection()- kullanıcı birden çok şekil seçmedithis.SingleSelection- kullanıcının sağ tıklandığı şekil veya diyagramshape.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.