因为要做一个自定义表格控件,所以需要动态做成大量控件,当我动态追加2万个以上的控件时,系统报错
提示:Error creating window handle.(创建窗口句柄时出错)
好像系统最多让我创建1万个,如果再多需要修改注册表,但即使修改注册表也最多能创建18000个
如何解决上面的问题啊,还请高手赐教。
------解决方案--------------------
能说出你要建什么控件吗?
加载这么多个控件,你应该考虑此方法可能不太好?或许换个解决方案更好。
------解决方案--------------------
因为要做一个自定义表格控件,所以要增加2万以上的控件?
我觉得你应该把那些重复的控件直接用画的draw,而不是加载N多控件。画出来的格子或说假控件也可以通过随便点击的坐标来确认哪个被点击了。
------解决方案--------------------
不应该创建那么多控件。你应该只创建可视化区域内的控件。
即使系统自带的控件,也不能直接处理那么多的行数。否则就不会有ListView的虚拟模式(VirtualMode)了。
例如你的表格有10万行,但用户不可能同时看到10万行。只能看到可视区域的一些行。例如可视区域就只有50行,则你只需要创建50行。
你需要管理可视化区域、当前行的位置和总行数。用户改变浏览范围(拖动滚动条)或可视化区域大小时,重新计算需要显示的内容。
规定只能正行滚动,可能算法会更加简化。(无论怎样调整大小,可视化的第一行的y总是0,不会出现看到前面半行的情况)
对于内部的控件,缺少时补充,多余时删除。但不应直接去清除后逐一new。你需要做的是对各控件的属性进行更新。
此外,你可能还要使用双缓冲技术减少闪烁。
------解决方案--------------------
是这样的。
人家大公司做的数据绑定控件,基本上都会处理行的“滚出和滚入”事件。因为当行混出可见区域之后,出发了“滚出”事件之后,就会把控件复用给“滚入”的数据行,而不会创建新的控件。
------解决方案--------------------
其实想一想 总要有个上限
不是1w 也可能是 10w 总会有人遇到 上限的问题 不能无休止下去
对吧