Built-In Owner-Drawing Desteği olan kontroller
Windows Forms'ta, özel çizim olarak da bilinen, belirli denetimlerin görsel görünümünü değiştirmeye yönelik bir teknik olan özelleştirilmiş çizimdir.
Not
Bu konudaki "kontrol" sözcüğü, Control veya Componenttüretilen sınıfları ifade edecek şekilde kullanılır.
Windows genellikle denetimin görünümünü belirlemek için BackColor gibi özellik ayarlarını kullanarak boyamayı otomatik olarak işler. Sahip çizimi ile, özellikleri kullanarak kullanılamayan görünüm öğelerini değiştirerek boyama işlemini devralacaksınız. Örneğin, birçok denetim görüntülenen metnin rengini ayarlamanıza olanak sağlar, ancak tek bir renkle sınırlıdır. Sahip çizimi, metnin bir kısmını siyah ve bir kısmını kırmızı olarak görüntüleme gibi işlemler yapmanıza olanak tanır.
Uygulamada, sahip tarafından yapılan çizim, bir form üzerindeki grafik çizmeye benzer. Örneğin, bir ListBox
denetimine öykünmek için formun Paint olayının işleyicisinde grafik yöntemlerini kullanabilirsiniz, ancak tüm kullanıcı etkileşimlerini işlemek için kendi kodunuzu yazmanız gerekir. Sahip çizimi kullanıldığında, denetim içeriğini çizmek için kodunuzu kullanır, ancak bunun dışında tüm özsel yeteneklerini korur. Grafik yöntemlerini kullanarak denetimdeki her öğeyi çizebilir veya her öğenin bazı yönlerini özelleştirirken, her öğenin diğer yönleri için varsayılan görünümü kullanabilirsiniz.
Windows Forms Denetimlerinde Sahip Çizimi
Bunu destekleyen denetimlerde sahip çizimi gerçekleştirmek için genellikle bir özellik ayarlar ve bir veya daha fazla olayı işlersiniz.
Sahip çizimi destekleyen denetimlerin çoğu, denetimin kendisini boyadığında çizimle ilgili olayı veya olayları tetikleyip tetiklemeyeceğini belirten bir OwnerDraw
veya DrawMode
özelliğine sahiptir.
OwnerDraw
veya DrawMode
özelliği olmayan denetimler, otomatik olarak gerçekleşen çizim olaylarını sağlayan DataGridView
denetimini ve çizimle ilgili kendi olayları olan bir dış işleme sınıfı kullanılarak çizilen ToolStrip
denetimini içerir.
Birçok farklı çizim olayı türü vardır, ancak bir denetim içinde tek bir öğe çizmek için tipik bir çizim olayı gerçekleşir. Olay işleyicisi, çizilmekte olan öğe ve onu çizmek için kullanabileceğiniz araçlar hakkında bilgi içeren bir EventArgs
nesnesi alır. Örneğin, bu nesne genellikle öğenin ebeveyn koleksiyonundaki dizin numarasını, öğenin görüntüleme sınırlarını gösteren bir Rectangle ve paint yöntemlerini çağırmak için bir Graphics nesnesini içerir. Bazı olaylar için EventArgs
nesnesi, öğenin arka plan veya odak dikdörtgeni gibi bazı yönlerini varsayılan olarak boyamak için çağırabileceğiniz öğe ve yöntemler hakkında ek bilgiler sağlar.
Sahip tarafından çizilmiş özelleştirmelerinizi içeren yeniden kullanılabilir bir denetim oluşturmak için, sahip çizimini destekleyen bir denetim sınıfından türetilen yeni bir sınıf oluşturun. Çizim olaylarını işlemek yerine, yeni sınıftaki uygun On
EventName yöntemi veya yöntemleri için geçersiz kılmalarda bulunan çizim kodunuzu ekleyin. Denetiminizin kullanıcılarının sahip çizimi olaylarını işleyebilmesi ve ek özelleştirme sağlayabilmesi için bu durumda On
temel sınıfındaki EventName yöntemini veya yöntemlerini çağırdığınızdan emin olun.
Aşağıdaki Windows Forms denetimleri, .NET Framework'ün tüm sürümlerinde özel çizimi destekler:
MenuItem (MainMenu ve ContextMenutarafından kullanılır)
.NET Framework 2.0'da yalnızca aşağıdaki denetimler özel çizimi destekler:
Aşağıdaki denetimler sahip çizimini destekler ve .NET Framework 2.0'da yenidir:
Aşağıdaki bölümlerde bu denetimlerin her biri için ek ayrıntılar sağlanır.
ListBox ve ComboBox Denetimleri
ListBox ve ComboBox denetimleri, denetimdeki öğeleri tek bir boyutta veya farklı boyutlarda çizmenizi sağlar.
Not veya Hatırlatma
CheckedListBox denetimi ListBox denetiminden türetilmiş olsa da özel çizimi desteklemez.
Her öğeyi aynı boyutta çizmek için DrawMode
özelliğini OwnerDrawFixed olarak ayarlayın ve DrawItem
olayını işleyin.
Her öğeyi farklı bir boyut kullanarak çizmek için DrawMode
özelliğini OwnerDrawVariable olarak ayarlayın ve hem MeasureItem
hem de DrawItem
olaylarını işleyebilir.
MeasureItem
olayı, öğe için DrawItem
olayı gerçekleşmeden önce öğenin boyutunu belirtmenizi sağlar.
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki konulara bakın:
Menü Öğesi Bileşeni
MenuItem bileşeni, bir MainMenu veya ContextMenu bileşenindeki tek bir menü öğesini temsil eder.
Bir MenuItemçizmek için OwnerDraw
özelliğini true
olarak ayarlayın ve DrawItem
olayını işleyin.
DrawItem
olayı gerçekleşmeden önce menü öğesinin boyutunu özelleştirmek için öğenin MeasureItem
olayını işleyin.
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki başvuru konularına bakın:
TabControl Denetimi
TabControl denetimi, denetimde tek tek sekmeler çizmenizi sağlar. Sahip çizimi yalnızca sekmeleri etkiler; TabPage içeriği etkilenmez.
Bir TabControl'de her sekmeyi çizmek için DrawMode
özelliğini OwnerDrawFixed olarak ayarlayın ve DrawItem
olayını işleyin. Bu olay her sekme için yalnızca denetimde sekme görünür olduğunda bir kez gerçekleşir.
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki başvuru konularına bakın:
ToolTip Bileşeni
ToolTip bileşeni, görüntülendiğinde araç ipucunun tamamını çizmenizi sağlar.
Bir ToolTipçizmek için OwnerDraw
özelliğini true
olarak ayarlayın ve Draw
olayını işleyin.
Draw
olayı gerçekleşmeden önce ToolTip boyutunu özelleştirmek için Popup
olayını işleyin ve olay işleyicisinde ToolTipSize özelliğini ayarlayın.
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki başvuru konularına bakın:
ListView Denetimi
ListView denetimi, denetimde tek tek öğeler, alt öğeler ve sütun üst bilgileri çizmenizi sağlar.
Denetimde sahip çizimini etkinleştirmek için OwnerDraw
özelliğini true
olarak ayarlayın.
Denetimdeki her öğeyi çizmek için DrawItem
olayını işleyebilirsiniz.
View özelliği Detailsolarak ayarlandığında denetimdeki her alt öğeyi veya sütun başlığını çizmek için, DrawSubItem
ve DrawColumnHeader
olaylarını işleyebilirsiniz.
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki başvuru konularına bakın:
TreeView Denetimi
TreeView denetimi, denetimde tek tek düğümler çizmenizi sağlar.
Yalnızca her düğümde görüntülenen metni çizmek için DrawMode
özelliğini OwnerDrawText olarak ayarlayın ve DrawNode
olayını işleyip metni çizin.
Her düğümün tüm öğelerini çizmek için DrawMode
özelliğini OwnerDrawAll olarak ayarlayın ve DrawNode
olayını işleyerek metin, simgeler, onay kutuları, artı ve eksi işaretleri ve düğümleri bağlayan çizgiler gibi ihtiyacınız olan öğeleri çizin.
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki başvuru konularına bakın:
DataGridView Kontrolü
DataGridView denetimi, denetimde tek tek hücreler ve satırlar çizmenizi sağlar.
Tek tek hücreleri çizmek için CellPainting
döngüsünü işleyin.
Satırları veya satırların tek tek öğelerini çizmek için, RowPrePaint
ve RowPostPaint
olaylarından birini veya her ikisini işleyebilirsiniz.
RowPrePaint
olayı, bir satırdaki hücreler boyanmadan önce gerçekleşir ve RowPostPaint
olayı hücreler boyandıktan sonra gerçekleşir. Satır arka planını, tek tek hücreleri ve satır ön planını ayrı ayrı boyamak için hem olayları hem de CellPainting
olayını işleyebilir veya ihtiyacınız olan belirli özelleştirmeleri sağlayabilir ve satırın diğer öğeleri için varsayılan görüntüyü kullanabilirsiniz.
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki konulara bakın:
Nasıl yapılır: Windows Forms DataGridView Denetiminde Hücrelerin Görünümünü Özelleştirme
Nasıl yapılır: Windows Forms DataGridView Denetiminde Satırların Görünümünü Özelleştirme
ToolStrip Denetimi
ToolStrip ve türetilmiş denetimler, görünümlerinin herhangi bir yönünü özelleştirmenizi sağlar.
ToolStrip denetimleri için özel işleme sağlamak amacıyla, bir ToolStrip, ToolStripManager, ToolStripPanelveya ToolStripContentPanel üzerinde Renderer
özelliğini bir ToolStripRenderer
nesnesine ayarlayın ve ToolStripRenderer
sınıfı tarafından sağlanan birçok çizim olayından bir veya birkaçını ele alın. Alternatif olarak, belirli On
EventName yöntemlerini uygulayan veya geçersiz kılan, ToolStripRenderer
, ToolStripProfessionalRendererveya ToolStripSystemRenderer'ten türetilmiş kendi sınıfınızın bir örneğindeki Renderer
özelliğini ayarlayın.
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki konulara bakın:
Nasıl yapılır: Windows Forms'da ToolStrip Denetimi için Özel Renderedici Oluşturma ve Ayarlama
Ayrıca bkz.
.NET Desktop feedback