Özel denetimler veya Windows Paneli gibi Forms denetimleri yeniden boyutlandırılır zaman, sadece yeni maruz kalan bölümlerini yeniden çizilmesi vardır. Ancak, bu davranış bazen (bkz. Aşağıdaki 1) istenen sonuçları vermez.
Redrawing the whole control on resize
Kontrol sınıfında tanımlanan ResizeRedraw korumalı özellik resized zaman kontrolü kendisini yeniden çizer olup olmadığını gösterir. true Bu özelliği ayarlamak boyutlandırma üzerinde tüm kontrolü yeniden çizimini sağlamak için. Bu genellikle türetilmiş bir sınıf yapıcı yapılacaktır.
public MyControl()
{
InitializeComponent();
ResizeRedraw = true;
}
Siz veya türetilmiş bir sınıf oluşturmak istemiyorsanız olamaz Alternatif olarak,
yansıma kullanarak ya da sadece olay işleyicisi yeniden boyutlandırma geçersiz arayın
veya kontrol yöntemi Yenile özelliğini ayarlayın.
using System.Reflection;
public static void SetResizeRedraw(Control control)
{
typeof(Control).InvokeMember("ResizeRedraw",
BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
null, control, new object[] { true });
}
myControl.Resize += new EventHandler(myControl_Resize);
private void myControl_Resize(object sender, EventArgs e)
{
((Control)sender).Invalidate();
}
Bir numune kontrol
Aşağıdaki uzanan ve ne zaman denetimin boyutu değişir küçülür bir elips gösteren bir
kullanıcı denetimi bir koddur:
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 açıklamada, kontrol sadece kısmen yeniden çizilmesi ve whithout sonuç
yukarıdaki şekil 1'de benziyor. ResizeRedraw = true ifadesi dahil, aşağıdaki Şekil 2'de
gösterildiği gibi, kontrol doğru yeniden çizilir.
0 yorum:
Yorum Gönder