作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 C# Win Forms 应用程序,我在其中根据类中的 2 个属性在面板中动态绘制按钮。行和列。
我还有一个打开的对话框,它使用 2 个文本框设置这些属性。
我在该对话框上有一个名为“保存”的按钮,按下该按钮后,会将主类中的属性(行、列)更新为设置的任何值。
我希望主窗体根据应用的新设置(行和列)重绘动态绘制的按钮。我该怎么做?
编辑:
刷新无效。
另一个可能很重要的注意事项:我的按钮动态绘制发生在“Form1_Load”方法中。
最佳答案
基本上可以通过三种方式强制控件重绘自身,Refresh()、Update() 和 Invalidate()。正如 Adam Robinson 指出的那样,启用自定义绘画的最简单方法是覆盖 Paint 事件。把所有的绘画逻辑放在这里。使用 PaintEventArgs 参数提供的 Graphics 对象。
那么上面的调用有什么区别呢?
Invalidate 将控件(区域或矩形)标记为需要重新绘制,但不会立即重新绘制(当其他一切都已处理完毕并且应用程序变为空闲时会触发重新绘制).
更新 会导致控件在任何部分失效时立即重新绘制。
刷新 导致控件失效,然后更新(即立即重新绘制自身)。
我认为使用 Invalidate() 是一个好习惯,除非您有特殊需要。在大多数情况下,它会让你的程序更有效率。如果这样做,您甚至不需要在加载事件中包含绘制逻辑。这很可能在您甚至让您的表单可见之前就被覆盖并失效,这取决于您在 Load 事件中所做的其他事情。
关于C# 在对话框中设置更新时重新加载/重绘表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911190/
我是一名优秀的程序员,十分优秀!