Пошаговое руководство. Сериализация коллекций стандартных типов с использованием атрибута DesignerSerializationVisibilityAttribute
Иногда пользовательские элементы управления используют в качестве свойства коллекцию. Данное пошаговое руководство демонстрирует использование класса DesignerSerializationVisibilityAttribute для управления сериализацией коллекции во время проектирования. Применение значения Content к свойству коллекции обеспечит его сериализацию.
Чтобы скопировать весь текст кода из этой темы, см. ссылку Практическое руководство. Сериализация коллекций стандартных типов с использованием атрибута DesignerSerializationVisibilityAttribute.
Примечание
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров.Дополнительные сведения см. в разделе Работа с параметрами.
Обязательные компоненты
Для выполнения этого пошагового руководства потребуется следующее.
- разрешения, необходимые для создания и выполнения проектов приложений Windows Forms на компьютере, на котором установлена среда Visual Studio.
Создание элемента управления с сериализуемой коллекцией
Сначала нужно создать элемент управления с с сериализуемой коллекцией в качестве свойства. Изменить содержимое этой коллекции можно с помощью редактора коллекций, который доступен в окне Свойства.
Для создания элемента управления с сериализуемой коллекцией выполните следующие действия.
Создайте новый проект "Библиотека элементов управления Windows" под названием SerializationDemoControlLib. Дополнительные сведения см. в разделе Windows Control Library Template.
Переименуйте UserControl1 в SerializationDemoControl. Дополнительные сведения см. в разделе How to: Rename Identifiers.
В окне Свойства присвойте свойству Padding.All значение 10.
Поместите элемент управления TextBox в SerializationDemoControl.
Выберите элемент управления TextBox. В окне Свойства задайте следующие значения свойств.
Свойство
Значение
Multiline
true
Dock
ScrollBars
ReadOnly
true
В редакторе кода объявите поле строкового массива с именем 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;
Определите свойство 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();
}
}
Нажмите клавишу F5 для построения проекта и запустите элемент управления в тестовом контейнере элементов управления.
Найдите свойство Strings в объекте PropertyGrid тестового контейнера элементов управления. Щелкните свойство Strings, затем нажмите кнопку с многоточием (), чтобы открыть редактор коллекции строк.
Введите несколько строк в редакторе набора строк. Для разделения строк нажмите клавишу ВВОД в конце каждой строки. По завершении нажмите кнопку ОК.
Примечание
Введенные строки отображаются в поле TextBox элемента управления SerializationDemoControl.
Сериализация свойства коллекции
Для проверки сериализации элемента управления его можно поместить в форму и изменить содержимое коллекции с помощью редактора коллекций. Для проверки состояния сериализации служит файл конструктора, в который Конструктор Windows Forms Designer выдает код.
Для сериализации коллекции выполните следующие действия.
В решение добавьте новый проект приложения Windows. Назовите проект SerializationDemoControlTest.
В панели элементов перейдите на новую вкладку под названием SerializationDemoControlLib Components. На этой вкладке будет находиться SerializationDemoControl. Дополнительные сведения см. в разделе Пример. Автоматическое заполнение панели элементов пользовательскими компонентами.
Поместите SerializationDemoControl в форму.
Найдите свойство Strings в окне Свойства. Щелкните свойство Strings, затем нажмите кнопку с многоточием (), чтобы открыть редактор коллекции строк.
Введите несколько строк в редакторе коллекции строк. Для разделения строк нажмите клавишу ВВОД в конце каждой строки. По завершении нажмите кнопку ОК.
Примечание
Введенные строки отображаются в поле TextBox элемента управления SerializationDemoControl.
Нажмите кнопку Показать все файлы в обозревателе решений.
Откройте узел Form1. Под ним находится файл Form1.Designer.cs или Form1.Designer.vb. Это файл, в который Конструктор Windows Forms выдает код, представляющий состояние вашей формы и ее элементов управления на этапе разработки. Откройте этот файл в редакторе кода.
Откройте фрагмент файла под названием Windows Form Designer generated code и найдите там раздел serializationDemoControl1. Под этой надписью находится код, представляющий состояние сериализации вашего элемента управления. Введенные на шаге 5 строки отображаются назначении свойства Strings. В следующем примере показан код, который вы увидели бы при вводе строк "red", "orange" и "yellow".
[Visual Basic]
Me.serializationDemoControl1.Strings = New String() {"red", "orange", "yellow"}
[C#]
this.serializationDemoControl1.Strings = new string[] { "red", "orange", "yellow"};
В редакторе кода измените значение атрибута DesignerSerializationVisibilityAttribute в свойстве Strings на Hidden.
[Visual Basic]
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
[C#]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Пересоберите решение и повторите шаги с 4 по 8.
Примечание
В этом случае Конструктор Windows Forms не выдает назначения свойству Strings.
Следующие действия
Ознакомившись с сериализацией коллекции стандартных типов, попробуйте более глубоко интегрировать ваши собственные элементы управления в среду на этапе разработки. В следующих разделах описывается расширение интеграции пользовательских элементов управления на этапе разработки.
См. также
Задачи
Пример. Автоматическое заполнение панели элементов пользовательскими компонентами
Ссылки
DesignerSerializationVisibilityAttribute