zoukankan      html  css  js  c++  java
  • GDI画图(一)Refresh&Invalidate

    总结和开始记录实验的现象,调试代码的经验,同时开始用博客记录一些技术上的进步

    2017-09-01

    09:01:02

    1、

      picturebox 上 进行覆盖,移动,大小改变,都会触发控件重绘事件,重绘其本身和其所有的子控件,

    所以以绘图区域为父容器的pictureBox在程序运行时进行的任意操作只要是其visible = true 就会触发picturebox重绘;

     2、

      所有的技术更新完善应该在实验基本成功之后去做的,应该住很短的时间里打通设计的思路,确立该方案可行,而后加以技术完善,

    在设计之初不应该被诸多细节绊住手脚,细节之处可以先放到一边,先把主干作重要的功能实现出来。

    3、

    C# WinForm窗体 控件Control 的 Invalidate、Update、Refresh的区别

    Refresh: 强制控件使其工作区无效并立即重绘自己和任何子控件。== Invalidate Update

    Invalidate: 使控件的特定区域(可以自己设置区域,从而提高性能)无效并向控件发送绘制消息。
                    将控件标记为需要重绘,但是不会立即执行刷新重绘,等到系统空闲时进行重绘。


    Update: 使控件重绘其工作区内的无效区域,立即调用Paint事件。若有无效区域,Update将立即触发重绘。

    Paint: 无处不在。如果你调用3次Invalidate,但是系统将只触发一次Paint事件。

    大多数时候Invalidate已经足够了,当系统要集中进行大量的刷新重绘时,建议使用Invalidate,因为这样系统最终只进行一次刷新,提高了系统性能。如果你想立即执行刷新的时候,建议使用Refresh方法。

    Control.Refresh 方法


    • 强制控件使其工作区无效并立即重绘自己和任何子控件。

    反编译源码:


    public virtual void Refresh()  
    {  
        this.Invalidate(true);  
        this.Update();  
    }  

    Control.Invalidate 方法


    • 使控件的特定区域无效并向控件发送绘制消息。
     名称说明
    公共方法 .NET Compact Framework 提供支持 Invalidate() 使控件的整个图面无效并导致重绘控件。
    公共方法 Invalidate(Boolean) 使控件的特定区域无效并向控件发送绘制消息。还可以使分配给该控件的子控件无效。
    公共方法 .NET Compact Framework 提供支持 Invalidate(Rectangle) 使控件的指定区域无效(将其添加到控件的更新区域,下次绘制操作时将重新绘制更新区域),并向控件发送绘制消息。
    公共方法 Invalidate(Region) 使控件的指定区域无效(将其添加到控件的更新区域,下次绘制操作时将重新绘制更新区域),并向控件发送绘制消息。
    公共方法 Invalidate(Rectangle, Boolean) 使控件的指定区域无效(将其添加到控件的更新区域,下次绘制操作时将重新绘制更新区域),并向控件发送绘制消息。还可以使分配给该控件的子控件无效。
    公共方法 Invalidate(Region, Boolean) 使控件的指定区域无效(将其添加到控件的更新区域,下次绘制操作时将重新绘制更新区域),并向控件发送绘制消息。还可以使分配给该控件的子控件无效。

     备注

             调用 Invalidate 方法并不强制同步绘制;若要强制同步绘制,请在调用 Invalidate 方法之后调用 Update 方法。在不带参数的情况下调用此方法时,会将整个工作区添加到更新区域。

    Control.Update 方法


    • 使控件重绘其工作区内的无效区域。

    备注

             执行所有对绘制的挂起请求。

             有两种重新绘制窗体及其内容的方法:

    • 您可以将 Invalidate 方法的重载之一与 Update 方法一起使用。

    • 可以调用 Refresh 方法,此方法强制控件重新绘制其自身及其所有子级。这等效于将 Invalidate 方法设置为true 并将该方法与 Update 一起使用。

    Invalidate 方法控制绘制或重新绘制的内容。Update 方法控制发生绘制或重新绘制的时间。如果将 Invalidate 和Update 方法一起使用,而不是调用 Refresh,则重新绘制的内容取决于您使用的 Invalidate 的重载。Update 方法仅仅是强制立即绘制控件,而 Invalidate 方法则控制当您调用 Update 方法时所绘制的内容。

    示例代码:

     
    private void button1_Click(object sender, EventArgs e)  
    {  
        textBox1.Text = "XXX";  
      
        textBox1.Invalidate();  
      
        //textBox1.Update();  
        //textBox1.Refresh();  
      
        Thread.Sleep(3000);  
        textBox1.Text = "YYY";  
    }  

            由于Thread.Sleep这一句的存在,虽然textBox1执行了Invalidate,但是并没有显示"XXX",而是在3秒钟之后直接显示了"YYY";

            如果去除Update或者Refresh的注释,才可以实现先显示"XXX",3秒钟之后再显示"YYY"。

            Control.Update 方法:使控件重绘其工作区内的无效区域。
            Control.Refresh 方法:强制控件使其工作区无效并立即重绘自己和任何子控件,等效于将 Invalidate 方法设置为 true 并将该方法与 Update 一起使用。

    那么既然有了Update,为何还要存在Invalidate呢?
            原因是Invalidate有重载的版本例如:Invalidate(Rectangle, Boolean)   使控件的指定区域无效(将其添加到控件的更新区域,下次绘制操作时将重新绘制更新区域),并向控件发送绘制消息。还可以使分配给该控件的子控件无效。

            其实Invalidate 方法控制绘制或重新绘制的内容。Update 方法才是控制发生绘制或重新绘制的时间(即执行重绘制命名)。

  • 相关阅读:
    【转】总体样本方差的无偏估计样本方差为什么除以n-1
    【转】用PyQt5写的第一个程序
    向量的协方差计算
    数据挖掘模型
    数据挖掘方法论及实施步骤
    Hadoop MapReduce八大步骤以及Yarn工作原理详解
    传统数据仓库架构与Hadoop的区别
    数据库优化方案整理
    数仓interview总结
    十四个值得推荐的个人提升方法
  • 原文地址:https://www.cnblogs.com/12xiaole/p/7461496.html
Copyright © 2011-2022 走看看