【提问-自定义控件】[100]当自定义集合作为属性的时候添加不进数据
很纠结的一个问题
自定义的集合作为控件的属性 然后控件添加到窗体上
属性窗口识别出来是集合 然后也能添加数据 可是程序一运行的时候 在设计时添加的数据就没有了
然后我跳到窗体自动生成的代码去看 压根就没有给我的属性赋值
然后我又果断继承 List<> 还是无果在设计时能添加数据 程序一运行就没有
跳到自动生成的代码 貌似多了点东西但是还是没有给属性赋值
后来干脆直接 用 List<> 作为属性 oh yeah 一切正常了 数据能添加进去了(不过自动生成的代码很丑陋)
可是 现在的情况是不容直接使用 List<> 作为属性 因为控件中 我添加一个子项我要重绘一下控件
所以要在 Add Remove RemoveAt Clear....方法里面动动手脚
上一个代码大概的图

在图片中可以看到 我有三个属性 分别是我 自定义的集合 继承的List<>的 和 直接就是List<>的
然后我分别给这三个属性各添加了两个项

但是最终数据保存下来了的只有直接使用的List<>作为属性的ItemsList
再来看看自动生成的代码
从上面的代码中可以看出直接使用的List<>作为属性的ItemsList是被复制了的 而上面的两句则是为继承的List<>的ItemsExtendList生成的 但是却没有给ItemsExtendList属性赋值 然后我自定义的集合则直接果断的没有
再来看看我在ListView中添加的两个项自动生成的代码
明显创建了两个项然后通过AddRange添加进去的
我不知道我哪里搞错了 或者说 还有哪里没有搞 所以我添加的数据压根就没有自动生成代码
现在不知道这个东西要怎么解决 我要用自定义的集合因为
然后这样是不行滴 木有用
我还发现一个纠结的问题

点击Add的时候控件界面上能呈现反应 但是点击Remove的时候界面上却没有重绘 我也非常确信 我代码里有重绘代码
然后我用ListView试了一下 结果 ListView 也是这样的 不知道是我的VS问题 还是天生的...- -!、、、呃 这个都是次要的 至少不只是我的控件是这样的
问题的关键在于我上面说的那些 怎么样才能添加数据的时候 让他自动生成代码把数据添加进去 不然在设计的时候 有数据程序一运行数据就没了、、
希望哪位遇到过类似的问题的 或者说 做过类似的东西的指点一下! 感激不尽...
我是非常相信 我是还有哪里没有弄....但是我不知道是哪里..
自定义的集合作为控件的属性 然后控件添加到窗体上
属性窗口识别出来是集合 然后也能添加数据 可是程序一运行的时候 在设计时添加的数据就没有了
然后我跳到窗体自动生成的代码去看 压根就没有给我的属性赋值
然后我又果断继承 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";
从上面的代码中可以看出直接使用的List<>作为属性的ItemsList是被复制了的 而上面的两句则是为继承的List<>的ItemsExtendList生成的 但是却没有给ItemsExtendList属性赋值 然后我自定义的集合则直接果断的没有
再来看看我在ListView中添加的两个项自动生成的代码
// 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;
明显创建了两个项然后通过AddRange添加进去的
我不知道我哪里搞错了 或者说 还有哪里没有搞 所以我添加的数据压根就没有自动生成代码
现在不知道这个东西要怎么解决 我要用自定义的集合因为
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(); }
}
我还发现一个纠结的问题

点击Add的时候控件界面上能呈现反应 但是点击Remove的时候界面上却没有重绘 我也非常确信 我代码里有重绘代码
然后我用ListView试了一下 结果 ListView 也是这样的 不知道是我的VS问题 还是天生的...- -!、、、呃 这个都是次要的 至少不只是我的控件是这样的
问题的关键在于我上面说的那些 怎么样才能添加数据的时候 让他自动生成代码把数据添加进去 不然在设计的时候 有数据程序一运行数据就没了、、
希望哪位遇到过类似的问题的 或者说 做过类似的东西的指点一下! 感激不尽...
我是非常相信 我是还有哪里没有弄....但是我不知道是哪里..
...全文
相关推荐
QT添加自定义控件
当QTwidget的控件不满足开发者的需求的时候,如何在QT中快捷的添加自定义控件
224. 问题解答:如何在 SAP UI5 应用里显示环状进度条?
通过自定义 HTML 控件实现复杂的圆形时钟进度条,突破标准控件的限制。使用控件渲染自定义 HTML 内容content属性采用数据绑定语法绑定到模型的 progress 属性调用控制器中的方法接收 progress 数值参数使用 CSS创建圆形渐变效果通过绝对定位和变换创建时钟刻度返回完整的 HTML 字符串提供视觉吸引力强的进度显示,实时反映进度状态变化。
Smart.FormDesigner深度解析:基于.NET C# Winform的可视化表单设计器实战
在桌面应用开发中,动态表单设计是一项兼具实用性与技术深度的需求。通过可视化拖拽的方式,让业务人员自定义界面布局,是低代码平台的核心能力之一。其底层依托于.NET平台的反射机制与控件序列化原理,结合DesignSurface设计器宿主和PropertyGrid属性编辑器,能够高效实现控件的动态创建、属性配置与持久化存储。这一技术模式广泛应用于企业ERP、OA系统以及各类报销审批流程中,帮助开发者将表单维护工作从代码层面剥离出来,提升系统灵活性与交付效率。Winform作为成熟的桌面UI框架,提供了丰富的设计时
C#如何动态添加或删除窗体中的控件(源码示例)
操作程序窗体的controls属性实现动态添加和删除程序窗体中的控件。
duilib添加自定义控件代码
duilib中添加自定义控件,包括图片和代码等.


