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