首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否阻止在C#中重绘控件?

是否阻止在C#中重绘控件?
EN

Stack Overflow用户
提问于 2010-06-19 00:37:07
回答 4查看 2.2K关注 0票数 4

我有一个窗体,其中包含许多运行时生成的控件(图像、按钮、面板等),大约100个控件(我正在制作一个卡片匹配游戏,所以窗体中有很多控件)。

我将生成代码放入构造函数中,每次应用程序启动时,大约需要3-5秒才能完全加载所有控件。

如果我在顶部打开另一个窗口,然后返回到我的应用程序,控件将再次重新绘制。

如何防止控件被重绘?如果你不介意的话,请用C#给我举个简单的例子。

如有任何帮助,我们不胜感激!

EN

回答 4

Stack Overflow用户

发布于 2010-06-19 00:42:20

我找到了这篇文章,它解释了如何在.NET中通过调用WIN API SET_MESSAGE function来为不想更新的控件设置WM_SETREDRAW标志。虽然您可以停止某些控件的更新,但您确定不能通过减少页面上的控件数量来解决此问题吗? 100个控件似乎很多,可能表明您需要拥有多个视图。

享受吧!

票数 1
EN

Stack Overflow用户

发布于 2010-06-19 01:40:25

我的建议是使用表单作为绘图界面,并将您的卡位图直接绘制到表单上。这并不难做到。

您可以向表单Paint事件添加一个处理程序,该事件将为您提供带有Graphics对象的参数。使用graphics.DrawImageUnscaled在您想要的位置绘制每张卡片。

这将使应用程序变得更快。

票数 1
EN

Stack Overflow用户

发布于 2010-06-19 02:00:09

阻止控件重绘是非常没有意义的。你会在控件应该出现的地方得到一个洞,你的用户对这个洞没有任何用处。

因为你有太多的控件,所以它重绘的速度很慢。只有使用更少的控件,才能让它更快地重绘。或者使用可以在一个窗口中显示多个项目的控件,如ListBox、ListView、TreeView、DataGridView。

请注意,您的特定问题已在Vista和windows 7中修复。Aero主题对Windows使用屏幕外缓冲。这意味着当窗口被另一个窗口遮挡时,它们不再需要重新绘制自己。然而,当用户最小化窗口并恢复它时,你仍然会得到缓慢的重绘。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3071480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档