在对话框中更新设置时C#重新加载/重绘表单
我有一个C#Win Forms应用程序,我根据类中的2个属性动态绘制面板中的按钮。 行和列。
我还有一个打开的对话框,它使用2个文本框设置这些属性。
我在该对话框中有一个名为“save”的按钮,在按下时,将主类中的属性(行,列)更新为设置的任何值。
我希望主窗体根据应用的新设置(行和列)重绘动态绘制的按钮。 我怎样才能做到这一点?
编辑:
刷新无效。
另一个可能很重要的注意事项:我的动态绘制按钮出现在“Form1_Load”方法中。
您基本上有三种方法可以强制控件重绘自身,Refresh(),Update()和Invalidate()。 正如Adam Robinson所指出的,启用自定义绘制的最简单方法是覆盖Paint事件。 将所有绘画逻辑放在这里。 使用PaintEventArgs参数提供的Graphics对象。
那么上述调用之间的区别是什么?
Invalidate将控件(区域或矩形)标记为需要重新绘制,但不会立即重绘(当其他所有内容都被处理并且应用程序变为空闲时,将重新启动重绘)。
更新会导致控件在任何部分失效时立即重新绘制。
刷新导致控件无效,然后更新(即立即重新绘制)。
我会说使用Invalidate()是一个好习惯,除非你有特殊的需要来满足。 在大多数情况下,它将使您的程序更有效。 如果这样做,您甚至不需要在load事件中使用绘制逻辑。 在您甚至可以看到表单之前,这可能会被覆盖并失效,具体取决于您在Load事件中执行的操作。
Panel.Refresh()
将强制重绘所有子控件。
您不应该在表单的Paint
事件之外进行任何绘制。 这就是表单没有正确重绘的原因。 在那里移动您的自定义绘图,重绘应该正常。