Yerleşik Sahip Çizimi Destekli Denetimler
Özel çizim olarak da bilinen Windows Forms'ta sahip çizimi, belirli denetimlerin görsel görünümünü değiştirmeye yönelik bir tekniktir.
Dekont
Bu konudaki "control" sözcüğü, veya Component'den Control türetilen sınıfları ifade etmek için kullanılır.
Genellikle Windows, denetimin görünümünü belirlemek için gibi BackColor ö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 çizimi, formdaki çizim grafiklerine benzer. Örneğin, bir denetimi öykünmek ListBox
için formun Paint olayı için işleyicide grafik yöntemleri kullanabilirsiniz, ancak tüm kullanıcı etkileşimini işlemek için kendi kodunuzu yazmanız gerekir. Sahip çizimiyle denetim, içeriğini çizmek için kodunuzu kullanır, ancak aksi takdirde tüm iç özelliklerini 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 çizimini destekleyen denetimlerin çoğu, denetimin kendisini boyadığında çizimle ilgili olayını mı yoksa olaylarını mı oluşturacağını gösteren bir OwnerDraw
veya DrawMode
özelliğine sahiptir.
Veya DrawMode
özelliği olmayan OwnerDraw
denetimler, otomatik olarak gerçekleşen çizim olaylarını sağlayan denetimi ve ToolStrip
çizimle ilgili kendi olayları olan bir dış işleme sınıfı kullanılarak çizilen denetimi içerirDataGridView
.
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
nesne alır. Örneğin, bu nesne genellikle öğenin dizin numarasını üst koleksiyonu içinde, öğenin görüntüleme sınırlarını gösteren bir Rectangle ve paint yöntemlerini çağırmak için bir Graphics nesne içerir. Bazı olaylar için nesne, EventArgs
öğe ve yöntemler hakkında, varsayılan olarak öğenin arka plan veya odak dikdörtgeni gibi bazı yönlerini boyamak için çağırabileceğiniz 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ıfta uygun On
EventName yöntemi veya yöntemleri için geçersiz kılmalara sahip çizim kodunuzu ekleyin. Denetiminizin kullanıcılarının sahip çizim olaylarını işleyebilmesi ve ek özelleştirme sağlayabilmesi için bu durumda temel sınıf On
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 sahip çizimini destekler:
MenuItem(ve ContextMenutarafından MainMenu kullanılır)
Aşağıdaki denetimler yalnızca .NET Framework 2.0'da sahip çizimini 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 tek tek öğeleri tek bir boyutta veya farklı boyutlarda çizmenizi sağlar.
Dekont
Denetim denetimden ListBox türetilmiş olsa CheckedListBox da, sahip çizimini desteklemez.
Her öğeyi aynı boyutta çizmek için özelliğini OwnerDrawFixed olarak ayarlayın DrawMode
ve olayı işleyebilirDrawItem
.
Her öğeyi farklı bir boyut kullanarak çizmek için özelliğini olarak ayarlayın DrawMode
ve hem hem DrawItem
de olaylarını MeasureItem
işleyebilir.OwnerDrawVariable Olay, MeasureItem
bir öğe için olay gerçekleşmeden önce DrawItem
öğenin boyutunu belirtmenize olanak tanır.
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki konulara bakın:
MenuItem Bileşeni
Bileşen, MenuItem bir veya ContextMenu bileşenindeki tek bir MainMenu menü öğesini temsil eder.
Bir çizmek MenuItemiçin özelliğini olarak true
ayarlayın OwnerDraw
ve olayını işleyebilirDrawItem
. Olay gerçekleşmeden önce DrawItem
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
Denetim, TabControl denetimde tek tek sekmeler çizmenizi sağlar. Sahip çizimi yalnızca sekmeleri etkiler; TabPage içeriği etkilenmez.
içindeki TabControlher sekmeyi DrawMode
çizmek için özelliğini olarak OwnerDrawFixed ayarlayın ve olayı işleyebilir DrawItem
. 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
Bileşen, ToolTip görüntülendiğinde ToolTip'in tamamını çizmenizi sağlar.
Bir çizmek ToolTipiçin özelliğini olarak true
ayarlayın OwnerDraw
ve olayını işleyebilirDraw
. Olay gerçekleşmeden önce boyutunu ToolTip özelleştirmek için olayı işleyin Popup
ve olay işleyicisinde özelliğini ayarlayınToolTipSize.Draw
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki başvuru konularına bakın:
ListView Denetimi
Denetim, ListView denetimde tek tek öğeler, alt öğeler ve sütun üst bilgileri çizmenizi sağlar.
Denetimde sahip çizimini etkinleştirmek için özelliğini olarak true
ayarlayınOwnerDraw
.
Denetimdeki her öğeyi çizmek için olayı işleyebilirsiniz DrawItem
.
Özelliği olarak ayarlandığında denetimdeki View her alt öğeyi veya sütun başlığını çizmek için Detailsve DrawColumnHeader
olaylarını işleyebilirsinizDrawSubItem
.
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki başvuru konularına bakın:
TreeView Denetimi
Denetim, TreeView denetimde tek tek düğümler çizmenizi sağlar.
Yalnızca her düğümde görüntülenen metni çizmek için özelliğini OwnerDrawText olarak ayarlayın DrawMode
ve olayı işleyip DrawNode
metni çizin.
Her düğümün tüm öğelerini çizmek için özelliğini OwnerDrawAll olarak ayarlayın DrawMode
ve olayı işleyerek DrawNode
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 Denetimi
Denetim, DataGridView denetimde tek tek hücreler ve satırlar çizmenizi sağlar.
Tek tek hücreler çizmek için olayı işleyebilir CellPainting
.
Tek tek satırları veya satırların öğelerini çizmek için ve RowPostPaint
olaylarından RowPrePaint
birini veya her ikisini birden işleyebilir. Olay RowPrePaint
, bir satırdaki hücreler boyanmadan önce gerçekleşir ve RowPostPaint
hücreler boyandıktan sonra gerçekleşir. Satır arka planını, tek tek hücreleri ve CellPainting
satır ön planını ayrı ayrı boyamak için hem olayları hem de olayı 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üşünü Özelleştirme
Nasıl yapılır: Windows Forms DataGridView Denetiminde Satırların Görünüşünü Özelleştirme
ToolStrip Denetimi
ToolStrip ve türetilmiş denetimler, görünümlerinin herhangi bir yönünü özelleştirmenizi sağlar.
Denetimler için özel işleme sağlamak için ToolStrip , ToolStripManager, ToolStripPanelveya ToolStripContentPanel özelliğini ToolStripbir ToolStripRenderer
nesne olarak ayarlayın Renderer
ve sınıfı tarafından sağlanan birçok çizim olayının birini veya daha fazlasını işleyinToolStripRenderer
. Alternatif olarak, bir özelliği , öğesinden türetilen veya ToolStripSystemRenderer belirli On
EventName yöntemlerini uygulayan veya geçersiz kılan kendi sınıfınızın bir örneğine ayarlayınRenderer
.ToolStripRenderer
ToolStripProfessionalRenderer
Kod örnekleri de dahil olmak üzere daha fazla bilgi için aşağıdaki konulara bakın:
Ayrıca bkz.
.NET Desktop feedback