Aracılığıyla paylaş


Özel denetimler için tasarım zamanı özellikleri (Windows Forms .NET)

Bu makalede, Visual Studio'daki Windows Forms Görsel Tasarımcısı'ndaki denetimler için özelliklerin nasıl işleneceğini öğreneceksiniz.

Her denetim, temel sınıfından System.Windows.Forms.Controlaşağıdakiler gibi birçok özelliği devralır:

Denetim oluştururken yeni özellikler tanımlayabilir ve bunların tasarımcıda nasıl görüneceğini denetleyebilirsiniz.

Özellik tanımlama

Denetim tarafından tanımlanan get erişimcisine sahip tüm ortak özellikler Visual Studio Özellikleri penceresinde otomatik olarak görünür. Özelliği bir küme erişimcisi de tanımlıyorsa, özellik Özellikler penceresinde değiştirilebilir. Ancak özellikler, uygulanarak Özellikler penceresinde açıkça görüntülenebilir veya gizlenebilirBrowsableAttribute. Bu öznitelik, görüntülenip görüntülenmeyeceğini belirtmek için tek bir boole parametresi alır. Öznitelikler hakkında daha fazla bilgi için bkz . Özniteliklere (C#) veya Özniteliklere genel bakış (Visual Basic).

[Browsable(false)]
public bool IsSelected { get; set; }
<Browsable(False)>
Public Property IsSelected As Boolean

[NOT] Bir dizeye ve dizeden örtük olarak dönüştürülemez karmaşık özellikler bir tür dönüştürücü gerektirir.

Serileştirilmiş özellikler

Bir denetimde ayarlanan özellikler tasarımcının arka planda kod dosyasında serileştirilir. Bir özelliğin değeri varsayılan değerinden farklı bir değere ayarlandığında bu durum ortaya çıkar.

Tasarımcı bir özellikte değişiklik algıladığında, denetimin tüm özelliklerini değerlendirir ve değeri özelliğin varsayılan değeriyle eşleşmeyen tüm özellikleri serileştirir. Bir özelliğin değeri tasarımcının kod behid dosyasında serileştirilir. Varsayılan değerler tasarımcının hangi özellik değerlerinin seri hale getirileceğini belirlemesine yardımcı olur.

Varsayılan değerler

Bir özelliğin, özniteliğini uyguladığında veya özelliğin DefaultValueAttribute sınıfı özelliğe özgü Reset ve ShouldSerialize yöntemleri içerdiğinde varsayılan bir değere sahip olduğu kabul edilir. Öznitelikler hakkında daha fazla bilgi için bkz . Özniteliklere (C#) veya Özniteliklere genel bakış (Visual Basic).

Varsayılan bir değer ayarlayarak aşağıdakileri etkinleştirirsiniz:

  • özelliği, varsayılan değerinden değiştirilmişse Özellikler penceresinde görsel gösterge sağlar.
  • Kullanıcı özelliğe sağ tıklayıp Sıfırla'yı seçerek özelliği varsayılan değerine geri yükleyebilir.
  • Tasarımcı daha verimli kod oluşturur.

Bir özellik ilkel tür gibi basit bir tür kullanıyorsa, özelliğine uygulanarak DefaultValueAttribute varsayılan değer ayarlanabilir. Ancak, bu özniteliğe sahip özellikler otomatik olarak atanan değerle başlamaz. Özelliğin yedekleme alanını aynı varsayılan değere ayarlamanız gerekir. bildiriminde veya sınıfın oluşturucusunda özelliğini ayarlayabilirsiniz.

Bir özellik karmaşık bir tür olduğunda veya tasarımcının sıfırlama ve serileştirme davranışını denetlemek istiyorsanız, ve yöntemlerini sınıfında tanımlayın Reset<PropertyName> ShouldSerialize<PropertyName> . Örneğin, denetim bir Age özellik tanımlarsa, yöntemler ve ShouldSerializeAgeolarak adlandırılırResetAge.

Önemli

özelliğine uygulayın DefaultValueAttribute veya hem ShouldSerialize<PropertyName> hem de Reset<PropertyName> yöntemlerini sağlayın. İkisini birden kullanmayın.

Özellikler, Özellikler penceresi aracılığıyla özellik adına sağ tıklayıp Sıfırla'yı seçerek varsayılan değerlerine "sıfırlanabilir".

Özellikler kılavuzundaki Bağlamı sıfırla menü öğesi.

Özellikler>Sağ tıklama>Bağlam menüsünü sıfırla seçeneğinin kullanılabilirliği şu durumlarda etkinleştirilir:

  • özelliğinde DefaultValueAttribute özniteliği uygulanmış ve özelliğin değeri özniteliğin değeriyle eşleşmiyor.
  • Özelliğin sınıfı, olmadan ShouldSerialize<PropertyName>bir Reset<PropertyName> yöntem tanımlar.
  • Özelliğin sınıfı bir Reset<PropertyName> yöntem tanımlar ve ShouldSerialize<PropertyName> true döndürür.

DefaultValueAttribute

Bir özelliğin değeri tarafından DefaultValueAttributesağlanan değerle eşleşmiyorsa, özellik değiştirilmiş olarak kabul edilir ve Özellikler penceresinden sıfırlanabilir.

Önemli

Bu öznitelik, karşılık gelen Reset<PropertyName> ve ShouldSerialize<PropertyName> yöntemleri olan özelliklerde kullanılmamalıdır.

Aşağıdaki kod, varsayılan değerine sahip bir numaralandırma ve varsayılan değeri North 10 olan bir tamsayı olmak üzere iki özellik bildirir.

[DefaultValue(typeof(Directions), "North")]
public Directions PointerDirection { get; set; } = Directions.North;

[DefaultValue(10)]
public int DistanceInFeet { get; set; } = 10;
<DefaultValue(GetType(Directions), "North")>
Public Property PointerDirection As Directions = Directions.North

<DefaultValue(10)>
Public Property DistanceInFeet As Integer = 10

Sıfırlama ve ShouldSerialize

Daha önce belirtildiği gibi ve ShouldSerialize<PropertyName> yöntemleri, Reset<PropertyName> yalnızca bir özelliğin sıfırlama davranışına değil, aynı zamanda bir değerin değiştirilip değiştirilmediğini ve tasarımcının arka planda kod dosyasında seri hale getirilip getirilmediğini belirlemede de yol gösterme fırsatı sağlar. Her iki yöntem de birlikte çalışır ve birini diğeri olmadan tanımlamamanız gerekir.

Önemli

Reset<PropertyName> ve ShouldSerialize<PropertyName> yöntemleri, içeren DefaultValueAttributebir özellik için oluşturulmamalıdır.

Tanımlandığında Reset<PropertyName> , Özellikler penceresinde bu özellik için bağlam menüsünü sıfırla seçeneği görüntülenir. Sıfırla seçildiğinde Reset<PropertyName> yöntemi çağrılır. Bağlam menüsünü sıfırla seçeneği, yöntemi tarafından ShouldSerialize<PropertyName> döndürülen değer tarafından etkinleştirilir veya devre dışı bırakılır. döndürdüğünde ShouldSerialize<PropertyName> true, özelliğin varsayılan değerinden değiştiğini ve arka planda kod dosyası olarak serileştirilmesi gerektiğini gösterir ve Bağlam menüsünü sıfırla seçeneğini etkinleştirir. Döndürülürse false Bağlam menüsünü sıfırla seçeneği devre dışı bırakılır ve arkadaki kodda özellik kümesi kodu kaldırılır.

İpucu

Her iki yöntem de denetimin genel API'sini telafi etmemesi için özel kapsamla tanımlanabilir ve tanımlanmalıdır.

Aşağıdaki kod parçacığı adlı Directionbir özellik bildirir. Bu özelliğin tasarımcı davranışı ve ShouldSerializeDirection yöntemleri tarafından ResetDirection denetlenmektedir.

public Directions Direction { get; set; } = Directions.None;

private void ResetDirection() =>
    Direction = Directions.None;

private bool ShouldSerializeDirection() =>
    Direction != Directions.None;
Public Property Direction As Directions = Directions.None

Private Sub ResetDirection()
    Direction = Directions.None
End Sub

Private Function ShouldSerializeDirection() As Boolean
    Return Direction <> Directions.None
End Function

Tür dönüştürücüleri

Tür dönüştürücüleri genellikle bir türü diğerine dönüştürürken, özellik kılavuzu ve diğer tasarım zamanı denetimleri için dizeden değere dönüştürme de sağlar. Dizeden değere dönüştürme, karmaşık özelliklerin bu tasarım zamanı denetimlerinde temsil edilmesini sağlar.

Çoğu yerleşik veri türü (sayılar, numaralandırmalar ve diğerleri) dizeden değere dönüştürmeler sağlayan ve doğrulama denetimleri gerçekleştiren varsayılan tür dönüştürücülere sahiptir. Varsayılan tür dönüştürücüleri ad alanındadır System.ComponentModel ve dönüştürülen türün adını alır. Dönüştürücü türü adları şu biçimi kullanır: {type name}Converter. Örneğin, StringConverter, TimeSpanConverterve Int32Converter.

Tür dönüştürücüleri, Özellikler penceresiyle tasarım zamanında yoğun bir şekilde kullanılır. Bir tür dönüştürücüsü, kullanılarak bir özelliğe veya türe TypeConverterAttributeuygulanabilir.

Özellikler penceresi, özelliği üzerinde bildirildiğinde TypeConverterAttribute özelliği dize değeri olarak görüntülemek için dönüştürücüleri kullanır. TypeConverterAttribute bir türe bildirildiğinde, Özellikler penceresi bu türün her özelliğinde dönüştürücüsü kullanır. Tür dönüştürücüsü, tasarımcının arka planda kod dosyasında özellik değerini serileştirmeye de yardımcı olur.

Tür düzenleyicileri

Özellik türü yerleşik veya bilinen bir tür olduğunda Özellikler penceresi otomatik olarak bir özellik için tür düzenleyicisi kullanır. Örneğin, boole değeri True ve False değerlerine sahip bir birleşik giriş kutusu olarak düzenlenir ve DateTime tür takvim açılan listesini kullanır.

Önemli

.NET Framework'ten bu yana özel tür düzenleyicileri değişti. Daha fazla bilgi için bkz . .NET Framework (Windows Forms .NET) sonrasındaki tasarımcı değişiklikleri.