İzlenecek yol: Standart türlerin koleksiyonlarını serileştirme

Özel denetimleriniz bazen bir koleksiyonu özellik olarak kullanıma sunar. Bu izlenecek yol, DesignerSerializationVisibilityAttribute bir koleksiyonun tasarım zamanında nasıl serileştirildiği denetlemek için sınıfının nasıl kullanılacağını gösterir. ContentDeğer koleksiyon özelliğine uygulandığında, özelliğin serileştirilmesi gerekir.

Bu konudaki kodu tek bir liste olarak kopyalamak için bkz. nasıl yapılır: Standart türlerin koleksiyonlarını DesignerSerializationVisibilityAttribute Ile serileştirme.

Önkoşullar

bu yönergeyi tamamlamak için Visual Studio gerekir.

Seri hale getirilebilir koleksiyonla bir denetim oluşturma

İlk adım, bir seri hale getirilebilir koleksiyonu özelliği olarak bir denetim oluşturmaktır. Bu koleksiyonun içeriğini, Özellikler penceresinden erişebileceğiniz koleksiyon düzenleyicisinikullanarak düzenleyebilirsiniz.

  1. Visual Studio, bir Windows denetim kitaplığı projesi oluşturun ve serializationdemocontrollibolarak adlandırın.

  2. Olarak yeniden adlandırın UserControl1SerializationDemoControl . Daha fazla bilgi için bkz. kod sembolünü yeniden düzenlemeyi yeniden adlandırma.

  3. Özellikler penceresinde, özelliğinin değerini 10olarak ayarlayın.

  4. İçine bir TextBox Denetim koyun SerializationDemoControl .

  5. Denetimi seçin TextBox . Özellikler penceresinde, aşağıdaki özellikleri ayarlayın.

    Özellik Şununla değiştirin
    Multiline true
    Dock Fill
    Çubuklarını Vertical
    Özelliğinin true
  6. Kod düzenleyicisinde, içinde adlı bir dize dizisi alanı bildirin SerializationDemoControl .

        // 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 özelliğini tanımlayın SerializationDemoControl .

    Not

    ContentDeğer, koleksiyonun serileştirmesini 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 derlemek için F5 tuşuna basın ve denetimi UserControl Test kapsayıcısındaçalıştırın.

  9. UserControl test kapsayıcısınıniçinde dizeler özelliğini bulun. Dizeler özelliğini seçin ve sonra The Ellipsis button (...) in the Properties window of Visual Studiodize koleksiyonu düzenleyicisiniaçmak için üç nokta () düğmesini seçin.

  10. Dize koleksiyonu düzenleyicisinebirkaç dize girin. Her bir dizenin sonundaki ENTER tuşuna basarak onları ayırın. Dizeleri girmeyi tamamladığınızda Tamam ' a tıklayın.

Not

Yazdığınız dizeler içinde görüntülenir TextBoxSerializationDemoControl .

Koleksiyon özelliğini serileştirme

Denetiminizin serileştirme davranışını test etmek için, bunu bir forma yerleştirip koleksiyonun içeriğini koleksiyon Düzenleyicisiile değiştirirsiniz. seri hale getirilmiş koleksiyon durumunu, Windows Form Tasarımcısı kod yaydığı özel bir tasarımcı dosyasına bakarak görebilirsiniz.

  1. çözüme Windows bir uygulama projesi ekleyin. Projeyi adlandırın SerializationDemoControlTest .

  2. Araç kutusundaSerializationDemoControlLib bileşenleriadlı sekmeyi bulun. Bu sekmede, ' yi bulacaksınız SerializationDemoControl . Daha fazla bilgi için bkz. Izlenecek yol: araç kutusunu özel bileşenlerle otomatik olarak doldurma.

  3. Formunuza bir koyun SerializationDemoControl .

  4. StringsStrings penceresinde özelliği bulun. Özelliği tıklatın Strings , sonra Stringsdize koleksiyonu düzenleyicisiniaçmak için üç nokta () düğmesine tıklayın.

  5. Dize koleksiyonu düzenleyicisinebirkaç dize yazın. Her bir dizenin sonunda ENTER tuşuna basarak onları ayırın. Dizeleri girmeyi tamamladığınızda Tamam ' a tıklayın.

    Not

    Yazdığınız dizeler içinde görüntülenir TextBoxSerializationDemoControl .

  6. Çözüm Gezgini, tüm dosyaları göster düğmesine tıklayın.

  7. Form1 düğümünü açın. Bunun altında Form1. Designer. cs veya Form1. Designer. vbadlı bir dosyadır. bu, Windows Form Tasarımcısı formunuzun tasarım zamanı durumunu ve onun alt denetimlerini temsil eden kodu yaydığı dosyadır. Bu dosyayı kod düzenleyicisindeaçın.

  8. Windows Form tasarımcısı tarafından üretilen kod adlı bölgeyi açın ve serializationDemoControl1etiketli bölümü bulun. Bu etiketin altında, denetiminizin serileştirilmiş durumunu temsil eden kod bulunur. 5. adımda yazdığınız dizeler, özelliği için bir atamada görüntülenir Strings . C# ve Visual Basic içindeki aşağıdaki kod örnekleri, "red", "turuncu" ve "sarı" dizelerini yazdığınız sırada göreceğiniz şekilde benzer kodu gösterir.

    this.serializationDemoControl1.Strings = new string[] {
            "red",
            "orange",
            "yellow"};
    
    Me.serializationDemoControl1.Strings = New String() {"red", "orange", "yellow"}
    
  9. Kod düzenleyicisinde, özelliğindeki öğesinin değerini olarak değiştirin StringsHidden .

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
    
  10. Çözümü yeniden derleyin ve 3. ve 4. adımları yineleyin.

Not

bu durumda Windows Form Tasarımcısı , özelliğe atama yapılmaz .

Sonraki adımlar

Standart türlerden oluşan bir koleksiyonun nasıl serileştirildiğini öğrendikten sonra, özel denetimlerinizi tasarım zamanı ortamına göre daha ayrıntılı bir şekilde tümleştirmeyi düşünün. Aşağıdaki konularda, özel denetimlerinizin tasarım zamanı tümleştirmesinin nasıl geliştirileceğini anlatmaktadır:

Ayrıca bkz.