C# - Windows窗体 - 强制重新绘制,就像屏幕外窗口移动一样

时间:2014-01-07 20:11:20

标签: c# winforms paint

这个问题有点奇怪,但我会尽力解释一切。

我在自动执行特定的窗口重新绘制时遇到了问题。基本上,我试图让油漆事件发生火灾,就像窗户被移动而其中一些内容在屏幕外(因为,例如,窗户的尺寸也是如此)大到适合屏幕)。

我已尝试使用Invalidate()Update()Refresh()以及this.Invalidate(new Rectangle(0, 0, Width, Height));。但没有一个产生我期待的效果。

目前,我在Paint事件中测试的情况是PaintEventArgs ClipRectangle属性的WidthHeight都大于零。启动应用程序时,以及运行所有上述方法时,后续的PaintEventArgs ClipRectangle的所有值都为零:

{ClipRectangle = {X=0,Y=0,Width=0,Height=0}}

但是,当我手动拖动窗口(其中一些是屏幕外)并且paint事件触发时,ClipRectangle具有以下值:

{ClipRectangle = {X=0,Y=0,Width=1356,Height=1636}}

显示的宽度和高度是窗口的完整尺寸。

我假设两种情况的不同之处在于,在后一种情况下,因为某些窗口是屏幕外的,所以当移动到以前不在屏幕上时,所有窗口都必须重新绘制;不过,诚然,我并不完全确定这些不同案件的确切原因。不幸的是,通过我所有的疯狂,不同的尝试,我的程序只有在这些特定情况下发生Paint事件时才有效。是否有人知道有任何方法强制发生这样的事件(最好不管窗口是否实际在屏幕外)?只要它可靠地工作,我就不在乎解决方案是多么的怪异或奇怪。

1 个答案:

答案 0 :(得分:0)

尝试在OnPaint函数中添加此内容:

if (e.ClipRectangle.Width < 200 || e.ClipRectangle.Height<200)
{
    this.Refresh();
}
else
{
    //your paint code
}