我有一个窗体,其中包含许多运行时生成的控件(图像、按钮、面板等),大约100个控件(我正在制作一个卡片匹配游戏,所以窗体中有很多控件)。
我将生成代码放入构造函数中,每次应用程序启动时,大约需要3-5秒才能完全加载所有控件。
如果我在顶部打开另一个窗口,然后返回到我的应用程序,控件将再次重新绘制。
如何防止控件被重绘?如果你不介意的话,请用C#给我举个简单的例子。
如有任何帮助,我们不胜感激!
发布于 2010-06-19 00:42:20
我找到了这篇文章,它解释了如何在.NET中通过调用WIN API SET_MESSAGE function来为不想更新的控件设置WM_SETREDRAW标志。虽然您可以停止某些控件的更新,但您确定不能通过减少页面上的控件数量来解决此问题吗? 100个控件似乎很多,可能表明您需要拥有多个视图。
享受吧!
发布于 2010-06-19 01:40:25
我的建议是使用表单作为绘图界面,并将您的卡位图直接绘制到表单上。这并不难做到。
您可以向表单Paint事件添加一个处理程序,该事件将为您提供带有Graphics对象的参数。使用graphics.DrawImageUnscaled在您想要的位置绘制每张卡片。
这将使应用程序变得更快。
发布于 2010-06-19 02:00:09
阻止控件重绘是非常没有意义的。你会在控件应该出现的地方得到一个洞,你的用户对这个洞没有任何用处。
因为你有太多的控件,所以它重绘的速度很慢。只有使用更少的控件,才能让它更快地重绘。或者使用可以在一个窗口中显示多个项目的控件,如ListBox、ListView、TreeView、DataGridView。
请注意,您的特定问题已在Vista和windows 7中修复。Aero主题对Windows使用屏幕外缓冲。这意味着当窗口被另一个窗口遮挡时,它们不再需要重新绘制自己。然而,当用户最小化窗口并恢复它时,你仍然会得到缓慢的重绘。
https://stackoverflow.com/questions/3071480
复制相似问题