在对话框中更新设置时C#重新加载/重绘表单

我有一个C#Win Forms应用程序,我根据类中的2个属性动态绘制面板中的按钮。 行和列。

我还有一个打开的对话框,它使用2个文本框设置这些属性。

我在该对话框中有一个名为“save”的按钮,在按下时,将主类中的属性(行,列)更新为设置的任何值。

我希望主窗体根据应用的新设置(行和列)重绘动态绘制的按钮。 我怎样才能做到这一点?

编辑:

刷新无效。

另一个可能很重要的注意事项:我的动态绘制按钮出现在“Form1_Load”方法中。

您基本上有三种方法可以强制控件重绘自身,Refresh(),Update()和Invalidate()。 正如Adam Robinson所指出的,启用自定义绘制的最简单方法是覆盖Paint事件。 将所有绘画逻辑放在这里。 使用PaintEventArgs参数提供的Graphics对象。

那么上述调用之间的区别是什么?

Invalidate将控件(区域或矩形)标记为需要重新绘制,但不会立即重绘(当其他所有内容都被处理并且应用程序变为空闲时,将重新启动重绘)。

更新会导致控件在任何部分失效时立即重新绘制。

刷新导致控件无效,然后更新(即立即重新绘制)。

我会说使用Invalidate()是一个好习惯,除非你有特殊的需要来满足。 在大多数情况下,它将使您的程序更有效。 如果这样做,您甚至不需要在load事件中使用绘制逻辑。 在您甚至可以看到表单之前,这可能会被覆盖并失效,具体取决于您在Load事件中执行的操作。

Panel.Refresh()

将强制重绘所有子控件。

您不应该在表单的Paint事件之外进行任何绘制。 这就是表单没有正确重绘的原因。 在那里移动您的自定义绘图,重绘应该正常。