來了解 DesignerSerializationVisibilityAttribute 用途,[DesignerSerializationVisibilityAttribute 序列化] 簡易白話說明,就是屬性視窗內 Property 設定完後,會不會儲存在 Designer.cs (下圖)
DesignerSerializationVisibilityAttribute 預設為 DesignerSerializationVisibility.Visible
官方範例說明
建立 SerializationDemoControl 使用者自訂控件,並建立 Strings Property
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace UCSerialization
{
public partial class SerializationDemoControl : UserControl
{
private string[] stringsValue = new string[1];
// DesignerSerializationVisibility 為 "Content" 或 "Visible",將會序列化該屬性
// 且該屬性可以在設計階段,透過 CollectionEditor 來進行編輯
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public string[] Strings
{
get
{
return this.stringsValue;
}
set
{
this.stringsValue = value;
// 把 stringsValue 陣列資料,塞進 TextBox 內
this.textBox1.Text = string.Join(Environment.NewLine, this.stringsValue);
}
}
public SerializationDemoControl()
{
InitializeComponent();
Padding = new Padding(10);
textBox1.Multiline = true;
textBox1.Dock = DockStyle.Fill;
textBox1.ScrollBars = ScrollBars.Vertical;
textBox1.ReadOnly = true;
}
}
}
把上述自訂控件拉進 Windows Form 內,並在自訂控件屬性視窗內編輯 Strings Property,就可以把輸入內容顯示在 TextBox 上輸入完成後 Strings Property 的結果顯示
TextBox 上會顯示輸入文字
Designer.cs 內可以看見 Strings Property 的輸入值
可以嘗試把 DesignerSerializationVisibility 設定為 Hidde 來觀察,要注意 String Property 已經序列化過,轉成 Hidde 時 Designer.cs 不會自動刪除已經序列化的資料,要自行刪除才行
沒有留言:
張貼留言