İzlenecek yol: Standart tür koleksiyonlarını seri hale getirme
Özel denetimleriniz bazen bir koleksiyonu özellik olarak kullanıma sunar. Bu izlenecek yol, bir koleksiyonun DesignerSerializationVisibilityAttribute tasarım zamanında nasıl serileştirildiği denetlemek için sınıfının nasıl kullanılacağını gösterir. değerinin Content koleksiyon özelliğinize uygulanması özelliğin seri hale getirilmesini sağlar.
Dikkat
Bu içerik .NET Framework için yazılmıştır. .NET 6 veya sonraki bir sürümü kullanıyorsanız, bu içeriği dikkatli kullanın. Tasarımcı sistemi Windows Forms için değişmiştir ve .NET Framework makalesindeki Tasarım Aracı değişiklikleri gözden geçirmeniz önemlidir.
Bu konudaki kodu tek bir liste olarak kopyalamak için bkz. How to: Serialize Collections of Standard Types with the Tasarım Aracı SerializationVisibilityAttribute.
Ön koşullar
Bu kılavuzu tamamlamak için Visual Studio'ya ihtiyacınız vardır.
Serileştirilebilir koleksiyon ile denetim oluşturma
İlk adım, özellik olarak serileştirilebilir bir koleksiyona sahip bir denetim oluşturmaktır. Özellikler penceresinden erişebileceğiniz Koleksiyon Düzenleyicisi'ni kullanarak bu koleksiyonun içeriğini düzenleyebilirsiniz.
Visual Studio'da bir Windows Denetim Kitaplığı projesi oluşturun ve serializationDemoControlLib olarak adlandırabilirsiniz.
UserControl1
öğesiniSerializationDemoControl
olarak yeniden adlandırın. Daha fazla bilgi için bkz . Kod simgesini yeniden düzenlemeyi yeniden adlandırma.Özellikler penceresinde özelliğin Padding.All değerini 10 olarak ayarlayın.
içinde
SerializationDemoControl
bir TextBox denetim yerleştirin.TextBox Denetimi seçin. Özellikler penceresinde aşağıdaki özellikleri ayarlayın.
Özellik Şununla değiştirin: Çok satırlı true
Dock Fill Scrollbars Vertical ReadOnly true
Kod Düzenleyicisi'nde, içinde
SerializationDemoControl
adlıstringsValue
bir dize dizisi alanı bildirin.// This field backs the Strings property. private: array<String^>^ stringsValue;
// This field backs the Strings property. private String[] stringsValue = new String[1];
' This field backs the Strings property. Private stringsValue(1) As String
Strings
üzerindeSerializationDemoControl
özelliğini tanımlayın.Dekont
Content değeri, koleksiyonun seri hale getirilmesini etkinleştirmek için kullanılır.
// When the DesignerSerializationVisibility attribute has // a value of "Content" or "Visible" the designer will // serialize the property. This property can also be edited // at design time with a CollectionEditor. public: [DesignerSerializationVisibility( DesignerSerializationVisibility::Content)] property array<String^>^ Strings { array<String^>^ get() { return this->stringsValue; } void set(array<String^>^ value) { this->stringsValue = value; // Populate the contained TextBox with the values // in the stringsValue array. StringBuilder^ sb = gcnew StringBuilder(this->stringsValue->Length); for (int i = 0; i < this->stringsValue->Length; i++) { sb->Append(this->stringsValue[i]); sb->Append(Environment::NewLine); } this->demoControlTextBox->Text = sb->ToString(); } }
// When the DesignerSerializationVisibility attribute has // a value of "Content" or "Visible" the designer will // serialize the property. This property can also be edited // at design time with a CollectionEditor. [DesignerSerializationVisibility( DesignerSerializationVisibility.Content )] public String[] Strings { get { return this.stringsValue; } set { this.stringsValue = value; // Populate the contained TextBox with the values // in the stringsValue array. StringBuilder sb = new StringBuilder(this.stringsValue.Length); for (int i = 0; i < this.stringsValue.Length; i++) { sb.Append(this.stringsValue[i]); sb.Append("\r\n"); } this.textBox1.Text = sb.ToString(); } }
' When the DesignerSerializationVisibility attribute has ' a value of "Content" or "Visible" the designer will ' serialize the property. This property can also be edited ' at design time with a CollectionEditor. <DesignerSerializationVisibility( _ DesignerSerializationVisibility.Content)> _ Public Property Strings() As String() Get Return Me.stringsValue End Get Set(ByVal value As String()) Me.stringsValue = Value ' Populate the contained TextBox with the values ' in the stringsValue array. Dim sb As New StringBuilder(Me.stringsValue.Length) Dim i As Integer For i = 0 To (Me.stringsValue.Length) - 1 sb.Append(Me.stringsValue(i)) sb.Append(ControlChars.Cr + ControlChars.Lf) Next i Me.textBox1.Text = sb.ToString() End Set End Property
Projeyi oluşturmak için F5 tuşuna basın ve denetiminizi UserControl Test Kapsayıcısı'nda çalıştırın.
UserControl Test Kapsayıcısı'nda PropertyGridStrings özelliğini bulun. Dizeler özelliğini ve ardından üç nokta () düğmesini seçerek Dize Koleksiyonu Düzenleyicisi'ni açın.
Dize Koleksiyonu Düzenleyicisi'ne birkaç dize girin. Her dizenin sonundaki Enter tuşuna basarak bunları ayırın. Dize girmeyi bitirdiğinizde Tamam'a tıklayın.
Dekont
Yazdığınız dizeler içinde TextBoxSerializationDemoControl
görünür.
Koleksiyon özelliğini seri hale getirme
Denetiminizin seri hale getirme davranışını test etmek için, bunu bir forma yerleştirecek ve Koleksiyon Düzenleyicisi ile koleksiyonun içeriğini değiştireceksiniz. Windows Forms Tasarım Aracı kodun yayıldığı özel bir tasarımcı dosyasına bakarak serileştirilmiş koleksiyon durumunu görebilirsiniz.
Çözüme bir Windows Uygulaması projesi ekleyin. Projeyi
SerializationDemoControlTest
olarak adlandırın.Araç Kutusu'nda SerializationDemoControlLib Bileşenleri adlı sekmeyi bulun. Bu sekmede
SerializationDemoControl
öğesini bulacaksınız. Daha fazla bilgi için bkz . İzlenecek Yol: Araç Kutusunu Özel Bileşenlerle Otomatik Olarak Doldurma.Formunuza bir
SerializationDemoControl
yerleştirin.Strings
Özelliği Özellikler penceresinde bulun. ÖzelliğineStrings
tıklayın, ardından Dize Koleksiyonu Düzenleyicisi'ni açmak için üç nokta () düğmesine tıklayın.Dize Koleksiyonu Düzenleyicisi'ne birkaç dize yazın. Her dizenin sonunda enter tuşuna basarak bunları ayırın. Dize girmeyi bitirdiğinizde Tamam'a tıklayın.
Dekont
Yazdığınız dizeler içinde TextBox
SerializationDemoControl
görünür.Çözüm Gezgini'de Tüm Dosyaları Göster düğmesine tıklayın.
Form1 düğümünü açın. Bunun altında Form1.Tasarım Aracı adlı bir dosya bulunur. cs veya Form1.Tasarım Aracı. vb. Bu, Windows Forms Tasarım Aracı formunuzun ve alt denetimlerinin tasarım zamanı durumunu temsil eden kodu yaydığı dosyadır. Bu dosyayı Kod Düzenleyicisi'nde açın.
Oluşturulan kod Tasarım Aracı Windows Form adlı bölgeyi açın ve serializationDemoControl1 etiketli bölümü bulun. Bu etiketin altında, denetiminizin seri hale getirilmiş durumunu temsil eden kod yer alır. 5. adımda yazdığınız dizeler, özelliğine
Strings
yapılan bir atamada görünür. C# ve Visual Basic'teki aşağıdaki kod örnekleri, "kırmızı", "turuncu" ve "sarı" dizelerini yazdığınızda göreceğiniz koda benzer bir kod gösterir.this.serializationDemoControl1.Strings = new string[] { "red", "orange", "yellow"};
Me.serializationDemoControl1.Strings = New String() {"red", "orange", "yellow"}
Kod Düzenleyicisi'nde özelliğindeki
Strings
değerini DesignerSerializationVisibilityAttribute olarak Hiddendeğiştirin.[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
Çözümü yeniden derleyin ve 3. ve 4. adımları yineleyin.
Dekont
Bu durumda, Windows Forms Tasarım Aracı özelliğine Strings
hiçbir atama yaymaz.
Sonraki adımlar
Standart türlerden oluşan bir koleksiyonu seri hale getirme hakkında bilgi edindikten sonra özel denetimlerinizi tasarım zamanı ortamıyla daha ayrıntılı bir şekilde tümleştirmeyi göz önünde bulundurun. Aşağıdaki konular, özel denetimlerinizin tasarım zamanı tümleştirmesini geliştirmeyi açıklar:
Ayrıca bkz.
.NET Desktop feedback