我有三个派生自Control ... Class1,Class2和Class3的类。
Class1是父级。它包含一个Class2对象列表,每个对象都包含一个Class3对象列表。
每个类都会覆盖OnPaint方法来绘制自己。
Class1和Class2绘制得很好,但从不调用Class3.OnPaint。
我是否需要执行任何特殊操作(可能在Class2.OnPaint中)以确保Class3对象失效并接收Paint消息?
答案 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控件的位置,并且值大于父控件的大小,它们总是在屏幕外。
感谢您的帮助!