我需要做些什么才能将Paint消息发送到C#中的Control?

时间:2010-02-17 23:21:55

标签: c# .net winforms gdi+

我有三个派生自Control ... Class1,Class2和Class3的类。

Class1是父级。它包含一个Class2对象列表,每个对象都包含一个Class3对象列表。

每个类都会覆盖OnPaint方法来绘制自己。

Class1和Class2绘制得很好,但从不调用Class3.OnPaint。

我是否需要执行任何特殊操作(可能在Class2.OnPaint中)以确保Class3对象失效并接收Paint消息?

5 个答案:

答案 0 :(得分:1)

只有在可见区域失效时才会调用OnPaint(因为它变得不被遮挡或因为它被手动无效。)

你能发布一些显示问题的简化代码片段吗?

答案 1 :(得分:0)

“包含为列表”是指(1)子控件已添加到父控件上的.Controls,或(2)您有一个控件列表作为父级中的变量控制?

如果是(1),则可以通过调用父控件上的.Refresh()强制绘制父控件和所有子控件。调用.Invalidate()并不一定意味着控件或其子代将立即被绘制。

如果是(2),则应将控件添加到父控件的.Controls以确保它们将被绘制。

答案 2 :(得分:0)

在控件的构造函数中尝试此操作。

this.SetStyle(ControlStyles.UserPaint, true);

答案 3 :(得分:0)

我认为控件必须使用每个控件集合链接在一起,因此任何父控件都应该将子控件添加到其控件集合中,我认为如何填充OnPaint事件。

答案 4 :(得分:0)

我的坏!我没有相对于它们的父控件设置Class3控件的位置,并且值大于父控件的大小,它们总是在屏幕外。

感谢您的帮助!