Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede özel denetimler tanıtılmaktadır ve bunların kullanıcı denetimlerinden ne kadar farklı olduğu açıklanmaktadır. Özel denetimler görsel bir tasarım yüzeyi sunmaz ve kullanıcı tarafından sağlanan kodu kullanarak kendilerini çizer. Bu tasarım, birden çok denetimi tek bir yeniden kullanılabilir ünitede gruplandırmak için görsel bir tasarım yüzeyi sağlayan kullanıcı denetimlerinden farklıdır.
Mevcut bir denetim veya kullanıcı denetimi, ihtiyacınız olan kullanıcı arabirimini veya etkileşimi sağlamaya yakın olmadığında özel denetimleri kullanın. Tam olarak uygulamak için sizin için daha fazla çaba gerektirir. Windows Forms yine de klavye ve fare kullanımı sağlar, ancak belirli davranışları uygulamanız gerekir. Özel denetim tasarım yüzeyi içermez çünkü tüm çizim yöntemindeki OnPaint kod aracılığıyla yapılır. Görsel olmayan tasarım yüzeyi aracılığıyla Timer gibi bileşenler ekleyebilirsiniz.
Temel sınıf
Özel denetim oluştururken iki temel sınıf arasından seçim yapın:
-
Bu temel sınıf, diğer Windows Forms denetimleri tarafından kullanılan sınıfla aynıdır. Denetimin giriş ve çıkışını doğrudan denetlersiniz.
System.Windows.Forms.ScrollableControl
Bu temel sınıf bazı Windows Forms denetimleri tarafından kullanılır. İçeriği kaydırma özelliğini ekleyerek genişletir
Control.
Özel denetimin içeriğini kaydırmanız gerekmediği sürece temel sınıfınız olarak kullanın Control .
Devralınan özellikler
Özel denetimin temel sınıfı olduğundan Control, tüm denetimler tarafından paylaşılan Windows Forms işlevselliğini otomatik olarak devralırsınız. Özel denetimle elde ettiğiniz özelliklerden birkaçı şunlardır:
- Klavye ve fare girişi.
- Tutturma ve yerleştirme gibi düzen davranışları.
- Sekme kullanımı için destek.
- Minimum ve maksimum boyut kısıtlamaları.
Resim
Boyama, denetimin görselini çizme anlamına gelir. Bunu, OnPaint yöntemini override ederek gerçekleştirirsiniz. Daha fazla bilgi almak için denetimlerin boyama işlemleri hakkında bakınız: Denetimlerde boyama ve çizim.
Visual Studio şablonlarını kullanarak özel bir denetim oluşturduğunuzda, yöntemini otomatik olarak geçersiz kılarsınız OnPaint . Denetiminizi çizen kodu yazmanız gerektiğinden şablon bunu bu nedenle yapar. Şablonun ne oluşturduğuna ilişkin bir örnek aşağıda verilmiştir:
public partial class CustomControl1 : Control
{
public CustomControl1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
}
Public Class CustomControl1
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
'Add your custom paint code here
End Sub
End Class
Özel bir denetimi, OnPaint yöntemini kullanarak boyarsınız. Bu yöntem, denetiminizi işlemek için ihtiyacınız olan tüm bilgileri ve işlevleri sağlayan tek bir PaintEventArgs bağımsız değişken (nesne) alır.
PaintEventArgs denetiminizi işlemede kullandığınız iki özellik sağlar:
PaintEventArgs.ClipRectangle—Denetimin yeniden çizilmesi gereken bölümünü temsil eder. Bu bölüm, denetimin tamamı veya yalnızca bir bölümü olabilir.
Graphics—Denetiminizin grafik yüzeyini temsil eder. Denetiminizi çizmek için gereken işlevselliği sağlayan grafik odaklı çeşitli nesneler ve yöntemler sağlar.
Denetim ekranda her çizildiğinde veya yenilendiğinde OnPaint yöntemi çağrılır ve PaintEventArgs.ClipRectangle nesnesi, boyamanın gerçekleştiği dikdörtgeni temsil eder. Denetimin tamamının yenilenmesi gerekiyorsa, PaintEventArgs.ClipRectangle denetimin tamamının boyutunu temsil eder. Denetimin yalnızca bir bölümünün yenilenmesi gerekiyorsa, yalnızca yeniden çizilmesi gereken bölgeyi temsil eder. Bu tür bir durum, bir denetimin kullanıcı arabirimindeki başka bir denetim tarafından kısmen gizlenmesi ve o diğer denetimin taşınması sonucunda, alttaki denetimin yeniden açığa çıkan kısmının yeniden çizilmesi gerektiği bir durum olabilir.
Denetimdeki OnPaint yönteminde bulunan kod, denetim ilk çizildiğinde ve geçersiz hale getirildiğinde çalışır. Denetiminizin yeniden boyutlandırıldığı her seferde yeniden çizildiğinden emin olmak için, denetiminizin oluşturucusunun içine aşağıdaki satırı ekleyin:
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.ResizeRedraw, True)
Örnek
Aşağıdaki kod parçacığı, kontrolün kenarında birden çok renkli dikdörtgen çizen özel bir kontroldür.
protected override void OnPaint(PaintEventArgs pe)
{
Rectangle rect = this.ClientRectangle;
// Bring the width/height in by 1 pixel so the rectangle is drawn inside the control.
// Otherwise, it kind of overlaps the outside edge.
rect.Width -= 1;
rect.Height -= 1;
Pen[] colorPens = new Pen[] { Pens.Blue, Pens.BlueViolet,
Pens.AliceBlue, Pens.CornflowerBlue,
Pens.Cyan, Pens.DarkCyan };
foreach (Pen pen in colorPens)
{
pe.Graphics.DrawRectangle(pen, rect);
rect.Inflate(-1, -1);
}
// Raise the Paint event so users can custom paint if they want.
base.OnPaint(pe);
}
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim rect As Rectangle = Me.ClientRectangle
'Bring the width/height in by 1 pixel so the rectangle is drawn inside the control.
'Otherwise, it kind of overlaps the outside edge.
rect.Width -= 1
rect.Height -= 1
Dim colorPens As Pen() = {Pens.Blue, Pens.BlueViolet,
Pens.AliceBlue, Pens.CornflowerBlue,
Pens.Cyan, Pens.DarkCyan}
For Each curPen As Pen In colorPens
e.Graphics.DrawRectangle(curPen, rect)
rect.Inflate(-1, -1)
Next
'Raise the Paint event so users can custom paint if they want.
MyBase.OnPaint(e)
End Sub
Yukarıdaki kod aşağıdaki görüntüye benzer bir denetim oluşturur:
Arka plan
Kontrolün arka planının `SystemColors.Control` rengi ile boyandığını, ancak `OnPaint` kodunun kontrolü temizlemediğini veya bir renk ile doldurmadığını fark edin. yöntemi çağrısından OnPaintBackground(PaintEventArgs)OnPaintönce arka planı boyar. Denetiminizin arka planını çizmeyi işlemek için geçersiz kılın OnPaintBackground . Bu yöntemin varsayılan uygulaması, BackColor ve BackgroundImage özellikleriyle belirlenen rengi ve görüntüyü sırasıyla çizer.
İlgili içerik
.NET Desktop feedback