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

时间:2009-12-15 23:21:38

标签: c# winforms

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

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

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

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

修改

刷新无效。

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

3 个答案:

答案 0 :(得分:4)

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

那么上述电话有什么区别?

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

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

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

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

答案 1 :(得分:0)

Panel.Refresh()

将强制重绘所有子控件。

答案 2 :(得分:0)

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