如何在C#中重新绘制控件的特定矩形?

如何在C#中重新绘制控件的特定矩形?,c#,winforms,winapi,controls,paint,C#,Winforms,Winapi,Controls,Paint,从我的程序的逻辑中,我知道我需要重新绘制一个简单WinForms控件的top\u left={x=32,y=32}和bottom\u right={x=64,y=64}之间的矩形。我不想重新绘制整个客户机区域,而只是其中的一部分(性能原因)。WinApi不能告诉我必须重画哪个部分,我必须告诉它。那我该怎么做呢 每次我需要此功能时,要重新绘制的矩形都不同 我想: 发送WM_PAINT消息(但我不知道如何传输矩形,因为此消息通常到达时wParam和lParam始终为0) (希望这不是重复的。如

从我的程序的逻辑中,我知道我需要重新绘制一个简单WinForms
控件的
top\u left={x=32,y=32}
bottom\u right={x=64,y=64}
之间的矩形。我不想重新绘制整个客户机区域,而只是其中的一部分(性能原因)。WinApi不能告诉我必须重画哪个部分,我必须告诉它。那我该怎么做呢

每次我需要此功能时,要重新绘制的矩形都不同

我想:

  • 发送
    WM_PAINT
    消息(但我不知道如何传输矩形,因为此消息通常到达时wParam和lParam始终为0)

(希望这不是重复的。如果是,我将删除。)

使用接受矩形的
Invalidate
方法

control.Invalidate(new Rectangle(32, 32, 32, 32));
control.Update(); //to invalidate control immediately

它使在下一次喷漆操作中将重新喷漆的特定控制区域无效。

使用接受矩形的
Invalidate
方法

control.Invalidate(new Rectangle(32, 32, 32, 32));
control.Update(); //to invalidate control immediately

它使在下一次喷漆操作中将重新喷漆的特定控制区域无效。

使用接受矩形的
Invalidate
方法

control.Invalidate(new Rectangle(32, 32, 32, 32));
control.Update(); //to invalidate control immediately

它使在下一次喷漆操作中将重新喷漆的特定控制区域无效。

使用接受矩形的
Invalidate
方法

control.Invalidate(new Rectangle(32, 32, 32, 32));
control.Update(); //to invalidate control immediately

它使将在下一次绘制操作中重新绘制的特定控制区域无效。

为什么不对不同区域使用不同的控制?@Muctadir,因为要重新绘制的区域是动态的。每次都不同。为什么不对不同的区域使用不同的控件?@Muctadir,因为要重画的区域是动态的。每次都不同。为什么不对不同的区域使用不同的控件?@Muctadir,因为要重画的区域是动态的。每次都不同。为什么不对不同的区域使用不同的控件?@Muctadir,因为要重画的区域是动态的。每次都不同。注意:Invalidate不保证立即被调用。@Pengu true,添加
control.Update()
fixesthis@Pengu这是一个打字错误(“does”虽然意思是“Not”)?因为这个对话让我很困惑。是的,Msdn中的一个拼写错误-对不起:),调用Invalidate方法不会强制进行同步绘制;要强制同步绘制,请在调用Invalidate方法后调用Update方法。注意:Invalidate不保证立即调用。@Pengu true,添加
control.Update()
fixesthis@Pengu这是一个打字错误(“does”虽然意思是“Not”)?因为这个对话让我很困惑。是的,Msdn中的一个拼写错误-对不起:),调用Invalidate方法不会强制进行同步绘制;要强制同步绘制,请在调用Invalidate方法后调用Update方法。注意:Invalidate不保证立即调用。@Pengu true,添加
control.Update()
fixesthis@Pengu这是一个打字错误(“does”虽然意思是“Not”)?因为这个对话让我很困惑。是的,Msdn中的一个拼写错误-对不起:),调用Invalidate方法不会强制进行同步绘制;要强制同步绘制,请在调用Invalidate方法后调用Update方法。注意:Invalidate不保证立即调用。@Pengu true,添加
control.Update()
fixesthis@Pengu这是一个打字错误(“does”虽然意思是“Not”)?因为这个对话让我很困惑。是的,Msdn中的一个拼写错误-对不起:),调用Invalidate方法不会强制进行同步绘制;要强制同步绘制,请在调用Invalidate方法后调用Update方法。