Aracılığıyla paylaş


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 OnEventName 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 Ontemel 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:

.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:

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 trueolarak 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:

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 OnEventName 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:

Ayrıca bkz.