Поделиться через


Пошаговое руководство. Сериализация коллекций стандартных типов с использованием атрибута DesignerSerializationVisibilityAttribute

Иногда пользовательские элементы управления используют в качестве свойства коллекцию. Данное пошаговое руководство демонстрирует использование класса DesignerSerializationVisibilityAttribute для управления сериализацией коллекции во время проектирования. Применение значения Content к свойству коллекции обеспечит его сериализацию.

Чтобы скопировать весь текст кода из этой темы, см. ссылку Практическое руководство. Сериализация коллекций стандартных типов с использованием атрибута DesignerSerializationVisibilityAttribute.

Примечание

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров.Дополнительные сведения см. в разделе Работа с параметрами.

Обязательные компоненты

Для выполнения этого пошагового руководства потребуется следующее.

  • разрешения, необходимые для создания и выполнения проектов приложений Windows Forms на компьютере, на котором установлена среда Visual Studio.

Создание элемента управления с сериализуемой коллекцией

Сначала нужно создать элемент управления с с сериализуемой коллекцией в качестве свойства. Изменить содержимое этой коллекции можно с помощью редактора коллекций, который доступен в окне Свойства.

Для создания элемента управления с сериализуемой коллекцией выполните следующие действия.

  1. Создайте новый проект "Библиотека элементов управления Windows" под названием SerializationDemoControlLib. Дополнительные сведения см. в разделе Windows Control Library Template.

  2. Переименуйте UserControl1 в SerializationDemoControl. Дополнительные сведения см. в разделе How to: Rename Identifiers.

  3. В окне Свойства присвойте свойству Padding.All значение 10.

  4. Поместите элемент управления TextBox в SerializationDemoControl.

  5. Выберите элемент управления TextBox. В окне Свойства задайте следующие значения свойств.

    Свойство

    Значение

    Multiline

    true

    Dock

    Fill

    ScrollBars

    Vertical

    ReadOnly

    true

  6. В редакторе кода объявите поле строкового массива с именем stringsValue в SerializationDemoControl.

    ' This field backs the Strings property.
     Private stringsValue(1) As String
    
    // This field backs the Strings property.
    private String[] stringsValue = new String[1];
    
            // This field backs the Strings property.
        private:
            array<String^>^ stringsValue;
    
    
    
  7. Определите свойство Strings в SerializationDemoControl.

Примечание

Значение Content используется для включения сериализации коллекции.

' 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
// 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.
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();
        }
    }
  1. Нажмите клавишу F5 для построения проекта и запустите элемент управления в тестовом контейнере элементов управления.

  2. Найдите свойство Strings в объекте PropertyGrid тестового контейнера элементов управления. Щелкните свойство Strings, затем нажмите кнопку с многоточием (Снимок экрана VisualStudioEllipsesButton), чтобы открыть редактор коллекции строк.

  3. Введите несколько строк в редакторе набора строк. Для разделения строк нажмите клавишу ВВОД в конце каждой строки. По завершении нажмите кнопку ОК.

Примечание

   Введенные строки отображаются в поле TextBox элемента управления SerializationDemoControl.

Сериализация свойства коллекции

Для проверки сериализации элемента управления его можно поместить в форму и изменить содержимое коллекции с помощью редактора коллекций. Для проверки состояния сериализации служит файл конструктора, в который Конструктор Windows Forms Designer выдает код.

Для сериализации коллекции выполните следующие действия.

  1. В решение добавьте новый проект приложения Windows. Назовите проект SerializationDemoControlTest.

  2. В панели элементов перейдите на новую вкладку под названием SerializationDemoControlLib Components. На этой вкладке будет находиться SerializationDemoControl. Дополнительные сведения см. в разделе Пример. Автоматическое заполнение панели элементов пользовательскими компонентами.

  3. Поместите SerializationDemoControl в форму.

  4. Найдите свойство Strings в окне Свойства. Щелкните свойство Strings, затем нажмите кнопку с многоточием (Снимок экрана VisualStudioEllipsesButton), чтобы открыть редактор коллекции строк.

  5. Введите несколько строк в редакторе коллекции строк. Для разделения строк нажмите клавишу ВВОД в конце каждой строки. По завершении нажмите кнопку ОК.

Примечание

Введенные строки отображаются в поле TextBox элемента управления SerializationDemoControl.

  1. Нажмите кнопку Показать все файлы в обозревателе решений.

  2. Откройте узел Form1. Под ним находится файл Form1.Designer.cs или Form1.Designer.vb. Это файл, в который Конструктор Windows Forms выдает код, представляющий состояние вашей формы и ее элементов управления на этапе разработки. Откройте этот файл в редакторе кода.

  3. Откройте фрагмент файла под названием Windows Form Designer generated code и найдите там раздел serializationDemoControl1. Под этой надписью находится код, представляющий состояние сериализации вашего элемента управления. Введенные на шаге 5 строки отображаются назначении свойства Strings. В следующем примере показан код, который вы увидели бы при вводе строк "red", "orange" и "yellow".

  4. [Visual Basic]

    Me.serializationDemoControl1.Strings = New String() {"red", "orange", "yellow"}
    
  5. [C#]

    this.serializationDemoControl1.Strings = new string[] {
            "red",
            "orange",
            "yellow"};
    
  6. В редакторе кода измените значение атрибута DesignerSerializationVisibilityAttribute в свойстве Strings на Hidden.

  7. [Visual Basic]

    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
    
  8. [C#]

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    
  9. Пересоберите решение и повторите шаги с 4 по 8.

Примечание

В этом случае Конструктор Windows Forms не выдает назначения свойству Strings.

Следующие действия

Ознакомившись с сериализацией коллекции стандартных типов, попробуйте более глубоко интегрировать ваши собственные элементы управления в среду на этапе разработки. В следующих разделах описывается расширение интеграции пользовательских элементов управления на этапе разработки.

См. также

Задачи

Практическое руководство. Сериализация коллекций стандартных типов с использованием атрибута DesignerSerializationVisibilityAttribute

Пример. Автоматическое заполнение панели элементов пользовательскими компонентами

Ссылки

DesignerSerializationVisibilityAttribute

Основные понятия

Общие сведения о сериализации конструктора