Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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
.net 我可以使用什么事件来通知控件它的一部分已离开屏幕的可视区域?_.net_Graphics_Gdi+ - Fatal编程技术网

.net 我可以使用什么事件来通知控件它的一部分已离开屏幕的可视区域?

.net 我可以使用什么事件来通知控件它的一部分已离开屏幕的可视区域?,.net,graphics,gdi+,.net,Graphics,Gdi+,我有一个用户控件正在进行绘制,当控件移动到屏幕边缘,或移动到Vista任务栏与之重叠时,屏幕边缘/任务栏边缘被绘制到控件上,在控件的可绘制区域上留下难看的线条 检测此情况并在控件上调用Invalidate的最佳方法是什么?“Moved”和“LocationChanged”事件显然处理控件在其父容器中的移动,而不是屏幕位置的更改。 我相信在WindowsXP中,当控件与另一个窗口重叠时,也会发生同样的情况,但我还没有测试过。同样的问题也适用于这种情况 我目前正在直接绘制控件的图形对象,我认为这是问

我有一个用户控件正在进行绘制,当控件移动到屏幕边缘,或移动到Vista任务栏与之重叠时,屏幕边缘/任务栏边缘被绘制到控件上,在控件的可绘制区域上留下难看的线条

检测此情况并在控件上调用Invalidate的最佳方法是什么?“Moved”和“LocationChanged”事件显然处理控件在其父容器中的移动,而不是屏幕位置的更改。 我相信在WindowsXP中,当控件与另一个窗口重叠时,也会发生同样的情况,但我还没有测试过。同样的问题也适用于这种情况

我目前正在直接绘制控件的图形对象,我认为这是问题的根源。利用控件的背景图像来回避这个问题会更好吗

注:这是对先前一个措辞非常糟糕的问题的一次重大改写。我觉得开始一个新的问题是应该做的,而不是试图修复我所写的废话


编辑:结果表明,不是任务栏导致了问题,只是屏幕底部边缘。我原以为任务栏也会导致问题,但看起来我错了

是的,您可以绘制控件的背景,以实现无问题的绘制


您是尝试在图形对象的剪裁区域(剪裁矩形)上绘制,还是使用图形对象的整个曲面?我认为,每当另一个窗口或对象隐藏另一个对象时,windows会向其发送“重新绘制”消息,并随之通过需要重新绘制的区域(剪辑矩形)。

在对发生的错误进行屏幕截图时,很明显,问题在于我正在绘制一个由绘制事件的ClipRectangle描述的区域,而不是控制本身的纠结

绘制事件的ClipRectangle描述单个移动事件显示的区域,它不描述控件边界的区域。 我只是碰巧足够快地移动了控制柄,很明显整个控制柄都被拉进了显示空间。我修改了代码,将其绘制到一个与控件大小相对应的区域,一切正常


另一个PEBKAC问题。哦,好吧,至少找到了错误。

我将复制您第一个问题中的注释:您的绘画情况如何?为什么任务栏会出现问题?通常情况下,您的控件不应在意是否有其他窗口位于其上方。当控件移动到屏幕边缘,或移动到Vista任务栏与之重叠时,屏幕边缘/任务栏边缘将被绘制到控件上,在控件的可绘制区域上留下难看的线条。我正在用OnPaint方法进行绘画。当其他窗体通过我的控件时,至少在Vista中没有可见的问题,但当控件到达屏幕边缘或任务栏时,屏幕边缘正在我的控件上绘制。我会做一些截图。重读开拓者的答案,我意识到它实际上是正确的。我把“剪辑矩形”误读为“客户矩形”。