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, birden çok denetimi tek bir yeniden kullanılabilir ünitede gruplandırmak için görsel tasarım yüzeyi sağlayan kullanıcı denetimlerinden farklıdır.
Özel denetimler, mevcut bir denetim veya kullanıcı denetimi, ihtiyacınız olan kullanıcı arabirimini veya etkileşimi sağlamaya yakın olmadığında kullanılır. Tam olarak uygulamak için sizin için daha fazla çaba gerektirir. Klavye ve fare işlemleri hala Windows Forms tarafından sağlanır, ancak bazı davranışları uygulamak sizin sorumluluğunuzdadır. Özel denetimle sağlanan bir tasarım yüzeyi yoktur, çünkü tüm çizim yöntemindeki OnPaint kod aracılığıyla yapılır. gibi Timerbileşenler, görsel olmayan tasarım yüzeyi aracılığıyla eklenebilir.
Temel sınıf
Özel denetim oluştururken aralarından seçim yapabileceğiniz iki temel sınıf vardır:
-
Bu, diğer Windows Forms denetimleri tarafından kullanılan temel sınıfla aynıdır. Kontrolün giriş ve çıkışını doğrudan kontrol edersiniz.
System.Windows.Forms.ScrollableControl
Bazı Windows Forms denetimleri bu temel sınıfı kullanır. Bu sınıf, iç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
Denetimin görselini çizmek olan boyama, OnPaint yöntemini geçersiz kılarak gerçekleştirilir. 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 denetim oluşturduğunuzda, OnPaint yöntemi sizin için otomatik olarak geçersiz kılınabilir. Denetiminizi çizmek için kodu yazmanız gerektiğinden şablon bunu 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
OnPaint yöntemiyle özel bir denetim boyanır. Bu yöntemin tek bağımsız değişkeni, denetiminizi işlemek için gereken tüm bilgileri ve işlevleri sağlayan bir PaintEventArgs nesnedir.
PaintEventArgs denetiminizi işlemek için kullanılan iki özellik sağlar:
PaintEventArgs.ClipRectangle—Denetimin yeniden çizilmesi gereken bölümünü temsil eder. Bu, denetimin tamamı veya denetimin bir parçası olabilir.
Graphics—Denetiminizin grafik yüzeyini temsil eder. Denetiminizi çizmek için gerekli 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
Önceki 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. Aslında arka plan, OnPaintBackground(PaintEventArgs) çağrılmadan önce OnPaint yöntemi tarafından boyanır. Denetiminizin arka planını çizmeyi işlemek için geçersiz kılın OnPaintBackground . Bu yöntemin varsayılan uygulaması, BackColor ve BackgroundImage özellikleri tarafından sırasıyla ayarlanan rengi ve görüntüyü çizmektir.
İlgili içerik
.NET Desktop feedback