Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要将绘制消息发送到C#中的控件,是否需要执行任何特殊操作?_C#_.net_Winforms_Gdi+ - Fatal编程技术网

要将绘制消息发送到C#中的控件,是否需要执行任何特殊操作?

要将绘制消息发送到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仅在存在已失效的可见区域时才会被调用(因为该区域未被遮挡或手动失效) 您可以发布一些

我有三个从控件派生的类…Class1、Class2和Class3

1班是家长。它包含一个Class2对象的列表,而每个Class2对象又包含一个Class3对象的列表

每个类都重写OnPaint方法来绘制自身

Class1和Class2本身绘制得很好,但Class3.OnPaint从未被称为


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

OnPaint仅在存在已失效的可见区域时才会被调用(因为该区域未被遮挡或手动失效)

您可以发布一些显示问题的简化代码片段吗?

通过“包含为列表”您的意思是(1)子控件已添加到父控件上的
.controls
,还是(2)在父控件中有一个控件列表作为变量

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


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

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

this.SetStyle(ControlStyles.UserPaint, true);

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

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


谢谢你的帮助

我解决了这个问题。Class3位置的计算坐标被设置为与其父控件(Class2)无关的屏幕坐标。由于坐标大于其父控件的大小,它们实际上总是在屏幕外。谢谢你的帮助!