有什么不一样,可以说具体点么,我也感兴趣,还有用this.Invalidate() 这个之后,刷新的时候屏幕会闪,怎么让它不闪

解决方案 »

  1.   

    我写过一个程序,override了OnPrint函数,重绘了主窗口的背景,加了一个按钮,在按钮里写入this.Invalidate();结果debug的时候,按按钮背景又回到重绘前的样子,当我在this.Invalidate();后加入this.UpData();时,按按钮才算会刷新背景,不知道这又是为什么?!~~
      

  2.   

    Control.Update()是使用控件重绘它的"无效"区域
    Control.Invalidate(...),使用控件的一个区域无效,然后重绘这个无效区域
      

  3.   

    从 MSDN 中看到的!Control.Invalidate 方法 ()  [C#]使控件的特定区域无效并向控件发送绘制消息。
        [C#]public void Invalidate();备注
    调用 Invalidate 方法并不强制同步绘制;若要强制同步绘制,请在调用 Invalidate 方法之后调用 Update 方法。在不带参数的情况下调用此方法时,会将整个工作区添加到更新区域。
      

  4.   

    Invalidate()是通知区域无效,至于什么时候重画还要等消息排队.
    Update()是通知立刻重画,不用等消息排队!
      

  5.   

    我感觉.Net的Invalidete/Update还是直接用的windows平台下的那套机制
    在windows下面Invalidate是设置无效区域
    而Update是相当于
    如果(无效区域不为空)
    {
        则SendMessage(窗体句柄,WM_PAINT, ....)
        // 表示立即进行重绘的操作
    }而如果只是Invalidate了,那么程序会在相对空闲的时候再检查消息队列
    里是否有WM_PAINT消息或是无效区域是否为空(此处的细节我也不太清楚),
    然后再处理WM_PAINT消息,进行重绘的操作
    所以如果要求及时的重绘,就得在Invalidate后接着调用Update
    当然一般是没那个必要的了