Winform程序中,Invalidate、Update和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 方法控制发生绘制或重新绘制的时间。如果将 InvalidateUpdate 方法一起使用,而不是调用 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 方法才是控制发生绘制或重新绘制的时间(即执行重绘制命名)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值