要将绘制消息发送到C#中的控件,是否需要执行任何特殊操作?
我有三个从控件派生的类…Class1、Class2和Class3 1班是家长。它包含一个Class2对象的列表,而每个Class2对象又包含一个Class3对象的列表 每个类都重写OnPaint方法来绘制自身 Class1和Class2本身绘制得很好,但Class3.OnPaint从未被称为要将绘制消息发送到C#中的控件,是否需要执行任何特殊操作?,c#,.net,winforms,gdi+,C#,.net,Winforms,Gdi+,我有三个从控件派生的类…Class1、Class2和Class3 1班是家长。它包含一个Class2对象的列表,而每个Class2对象又包含一个Class3对象的列表 每个类都重写OnPaint方法来绘制自身 Class1和Class2本身绘制得很好,但Class3.OnPaint从未被称为 我是否需要执行任何特殊操作(可能在Class2.OnPaint中)以确保Class3对象失效并接收绘制消息?OnPaint仅在存在已失效的可见区域时才会被调用(因为该区域未被遮挡或手动失效) 您可以发布一些
我是否需要执行任何特殊操作(可能在Class2.OnPaint中)以确保Class3对象失效并接收绘制消息?OnPaint仅在存在已失效的可见区域时才会被调用(因为该区域未被遮挡或手动失效) 您可以发布一些显示问题的简化代码片段吗?通过“包含为列表”您的意思是(1)子控件已添加到父控件上的
.controls
,还是(2)在父控件中有一个控件列表作为变量
如果(1)是这种情况,则可以通过在父控件上调用.Refresh()
强制绘制父控件和所有子控件。调用.Invalidate()
并不一定意味着控件或其子控件将立即被绘制
如果是(2),则应将控件添加到父控件上的
.controls
,以确保它们将被绘制。在控件的构造函数中尝试此操作
this.SetStyle(ControlStyles.UserPaint, true);
我认为必须使用每个控件中的控件集合将控件链接在一起,因此任何父控件都应该将子控件添加到其控件集合中,我认为OnPaint事件是如何填充的。我的错!我没有设置Class3控件相对于其父控件的位置,并且,由于值大于父控件的大小,所以它们总是在屏幕外
谢谢你的帮助 我解决了这个问题。Class3位置的计算坐标被设置为与其父控件(Class2)无关的屏幕坐标。由于坐标大于其父控件的大小,它们实际上总是在屏幕外。谢谢你的帮助!