Ö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 ShouldSerializeAge
olarak 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>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>
birReset<PropertyName>
yöntem tanımlar. - Özelliğin sınıfı bir
Reset<PropertyName>
yöntem tanımlar veShouldSerialize<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ı Direction
bir ö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.
.NET Desktop feedback