Aracılığıyla paylaş


İ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.

  1. Visual Studio'da bir Windows Denetim Kitaplığı projesi oluşturun ve serializationDemoControlLib olarak adlandırabilirsiniz.

  2. UserControl1 öğesini SerializationDemoControl olarak yeniden adlandırın. Daha fazla bilgi için bkz . Kod simgesini yeniden düzenlemeyi yeniden adlandırma.

  3. Özellikler penceresinde özelliğin Padding.All değerini 10 olarak ayarlayın.

  4. içinde SerializationDemoControlbir TextBox denetim yerleştirin.

  5. 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
  6. Kod Düzenleyicisi'nde, içinde SerializationDemoControladlı 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
    
  7. Strings üzerinde SerializationDemoControlö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
    
  8. Projeyi oluşturmak için F5 tuşuna basın ve denetiminizi UserControl Test Kapsayıcısı'nda çalıştırın.

  9. UserControl Test Kapsayıcısı'nda PropertyGridStrings özelliğini bulun. Dizeler özelliğini ve ardından üç nokta (The Ellipsis button (...) in the Properties window of Visual Studio) düğmesini seçerek Dize Koleksiyonu Düzenleyicisi'ni açın.

  10. 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 TextBoxSerializationDemoControlgö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.

  1. Çözüme bir Windows Uygulaması projesi ekleyin. Projeyi SerializationDemoControlTestolarak adlandırın.

  2. 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.

  3. Formunuza bir SerializationDemoControl yerleştirin.

  4. Strings Özelliği Özellikler penceresinde bulun. Özelliğine Strings tıklayın, ardından Dize Koleksiyonu Düzenleyicisi'ni açmak için üç nokta (The Ellipsis button (...) in the Properties window of Visual Studio.) düğmesine tıklayın.

  5. 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 TextBoxSerializationDemoControlgörünür.

  6. Çözüm Gezgini'de Tüm Dosyaları Göster düğmesine tıklayın.

  7. 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.

  8. 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"}
    
  9. Kod Düzenleyicisi'nde özelliğindeki Strings değerini DesignerSerializationVisibilityAttribute olarak Hiddendeğiştirin.

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
    
  10. Çö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.