【提问-自定义控件】[100]当自定义集合作为属性的时候添加不进数据
很纠结的一个问题
自定义的集合作为控件的属性 然后控件添加到窗体上
属性窗口识别出来是集合 然后也能添加数据 可是程序一运行的时候 在设计时添加的数据就没有了
然后我跳到窗体自动生成的代码去看 压根就没有给我的属性赋值
然后我又果断继承 List<> 还是无果在设计时能添加数据 程序一运行就没有
跳到自动生成的代码 貌似多了点东西但是还是没有给属性赋值
后来干脆直接 用 List<> 作为属性 oh yeah 一切正常了 数据能添加进去了(不过自动生成的代码很丑陋)
可是 现在的情况是不容直接使用 List<> 作为属性 因为控件中 我添加一个子项我要重绘一下控件
所以要在 Add Remove RemoveAt Clear....方法里面动动手脚
上一个代码大概的图
在图片中可以看到 我有三个属性 分别是我 自定义的集合 继承的List<>的 和 直接就是List<>的
然后我分别给这三个属性各添加了两个项
但是最终数据保存下来了的只有直接使用的List<>作为属性的ItemsList
再来看看自动生成的代码
// listControl1// this.listControl1.BackColor = System.Drawing.Color.Black;new ListControl.ItemCollection().Add(((ListItem)(resources.GetObject("listControl1.ItemsExtendList"))));new ListControl.ItemCollection().Add(((ListItem)(resources.GetObject("listControl1.ItemsExtendList1"))));this.listControl1.ItemsList = ((System.Collections.Generic.List<ListItem>)(resources.GetObject("listControl1.ItemsList")));this.listControl1.Location = new System.Drawing.Point(97, 12);this.listControl1.Name = "listControl1";this.listControl1.Size = new System.Drawing.Size(75, 23);this.listControl1.TabIndex = 0;this.listControl1.Text = "listControl1";
// listView1// System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("11");System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("12");this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {listViewItem1,listViewItem2});this.listView1.Location = new System.Drawing.Point(66, 62);this.listView1.Name = "listView1";this.listView1.Size = new System.Drawing.Size(121, 97);this.listView1.TabIndex = 1;this.listView1.UseCompatibleStateImageBehavior = false;
public void Add(ListItem item) { this.EnsureSpace(1); int index = this.IndexOf(item); if (index == -1) { this.m_arrItems[this.count++] = item; this.owner.Invalidate(); //重绘控件 }}
public List<ListItem> ItemsList { get { if (itemsList == null) itemsList = new List<ListItem>(); return itemsList; } set { itemsList = value; this.Invalidate(); }}