1. 程式人生 > 其它 >使用Resize重繪整個控制元件

使用Resize重繪整個控制元件

當自定義控制元件或windows fomrs 製件,如Panel,被重置,只有這些控制元件最新暴露的部分才會被重新繪製。然而,有時這些行為不會提供想要的結構(可見下面的圖片1).

這個示例通過設定控制元件的ResizeRedraw屬性,來演示如何確保重置後對整個控制元件進行重繪。

ResizeRedraw:定義在Control類中的受保護屬性,該屬性指示控制元件調整大小是否自己。為了確保使用resize對整個控制元件進行重繪,設定resize屬性為true。這個工作通常在繼承類的建構函式中進行。

[C#]

public MyControl()
{
  InitializeComponent();
  ResizeRedraw 
= true; }

或者,如果你不想要或不能建立一個繼承類,可以用反射設定屬性或簡單地使用控制元件的resize事件呼叫Invalidate或Refresh函式:

[C#]

using System.Reflection;

public static void SetResizeRedraw(Control control)
{
  typeof(Control).InvokeMember("ResizeRedraw",
    BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
    
null, control, new object[] { true }); } [C#] myControl.Resize += new EventHandler(myControl_Resize); private void myControl_Resize(object sender, EventArgs e) { ((Control)sender).Invalidate(); }

示例控制元件

下面是使用者控制元件的程式碼,當控制元件的尺寸變化時用於顯示橢圓形的擴大與縮小。

[C#]

public partial class MyControl : UserControl
{
  
public MyControl() { InitializeComponent(); ResizeRedraw = true; } protected override void OnPaintBackground(PaintEventArgs e) { base.OnPaintBackground(e); // draw a blue ellipse into the control area e.Graphics.FillEllipse(new SolidBrush(Color.Blue), 2, 2, ClientRectangle.Width - 4, ClientRectangle.Height - 4); } }

沒有ResizeRedraw引數,控制元件僅部分進行重繪,結果就是像圖片1;當ResizeRedraw = true,控制元件就如下面圖片所示可以正確重繪。