Özel VB.NET Denetimi Oluşturmak için Bir Sınıfı Programlama

Komple özel bileşenler oluşturmak çok gelişmiş bir proje olabilir. Ancak, çok daha az çabayla bir araç kutusu bileşeninin birçok avantajına sahip bir VB.NET sınıfı oluşturabilirsiniz. İşte böyle!

Eksiksiz bir özel bileşen oluşturmak için yapmanız gerekenlerin tadına bakmak için şu denemeyi deneyin:

-> VB.NET'te yeni bir Windows Uygulaması projesi açın.
-> Araç Kutusu'ndan forma bir CheckBox ekleyin.
-> Üstündeki "Tüm Dosyaları Göster" düğmesini tıklayın Çözüm Gezgini.

Bu, Visual Studio'nun projeniz için oluşturduğu dosyaları görüntüler (böylece gerek yoktur). Tarihsel bir dipnot olarak, VB6 derleyicisi aynı şeyleri çok yaptı, ancak koda asla erişemediniz çünkü derlenmiş "p-koduna" gömülmüştü. VB6'da da özel kontroller geliştirebilirsiniz, ancak çok daha zordu ve Microsoft'un sadece bu amaç için sağladığı özel bir yardımcı program gerektiriyordu.

Şeklinde Designer.vb dosyasını açtığınızda, aşağıdaki kodun CheckBox bileşenini desteklemek için doğru konumlara otomatik olarak eklendiğini göreceksiniz. (Visual Studio'nun farklı bir sürümüne sahipseniz, kodunuz biraz farklı olabilir.) Bu, Visual Studio'nun sizin için yazdığı koddur.

instagram viewer

'Windows Form Designer Özel bileşenleri için gereklidir _ Sistem olarak. ComponentModel. IContainer'NOTE: Windows Form Designer için aşağıdaki yordam gereklidir 'Windows Form Designer kullanılarak değiştirilebilir.' Kod düzenleyicisi kullanarak değiştirmeyin. _Private Sub InitializeComponent () Me. CheckBox1 = Yeni Sistem. Pencereler. Formlar. CheckBox () Bana. SuspendLayout () '' CheckBox1 'Me. CheckBox1.AutoSize = True Me. CheckBox1.Location = Yeni Sistem. Çizim. Puan (29, 28) Ben. CheckBox1.Name = "CheckBox1".. . ve benzerleri ...

Bu, özel bir denetim oluşturmak için programınıza eklemeniz gereken koddur. Gerçek CheckBox denetiminin tüm yöntemlerinin ve özelliklerinin .NET Framework tarafından sağlanan bir sınıfta olduğunu unutmayın: Sistemi. Pencereler. Formlar. CheckBox. Bu, tüm .NET programları için Windows'a yüklendiği için projenizin bir parçası değildir. Ama bir çok onun.

Dikkat edilmesi gereken başka bir nokta, WPF (Windows Presentation Foundation), .NET CheckBox sınıfı adlı tamamen farklı bir kitaplıktan gelir Sistemi. Pencereler. Kontroller. Bu makale yalnızca bir Windows Forms uygulaması için çalışır, ancak buradaki kalıtım ilkeleri herhangi bir VB.NET projesi için çalışır.

Projenizin standart kontrollerden birine çok benzeyen bir kontrole ihtiyacı olduğunu varsayalım. Örneğin, renk değiştiren veya küçük "onay" grafiğini göstermek yerine küçük bir "mutlu yüz" görüntüleyen bir onay kutusu. Bunu yapan bir sınıf oluşturacağız ve bunu projenize nasıl ekleyeceğinizi göstereceğiz. Bu kendi başına faydalı olsa da, asıl amaç VB.NET'leri miras.

Kodlamaya Başlayalım

Başlamak için, az önce eklediğiniz CheckBox'un adını değiştirin oldCheckBox. (Çözüm Gezgini'ni basitleştirmek için "Tüm Dosyaları Göster" i görüntülemeyi tekrar durdurmak isteyebilirsiniz.) Şimdi projenize yeni bir sınıf ekleyin. Bunu, Çözüm Gezgini'nde projeye sağ tıklayıp "Ekle" ve ardından "Sınıf" seçerek veya Proje menü öğesinin altındaki "Sınıf Ekle" yi seçmenin birkaç yolu vardır. Yeni sınıfın dosya adını şu şekilde değiştirin: newCheckBox işleri düz tutmak için. Son olarak, sınıfın kod penceresini açın ve şu kodu ekleyin:

Public Class newCheckBox CheckBox Özel CenterSquareColor As Color = Color öğesini devralır. Kırmızı Korumalı Geçersiz Kılma Alt OnPaint (ByVal pEvent _ As PaintEventArgs Olarak) Dim CenterSquare _ Yeni Dikdörtgen Olarak (3, 4, 10, 12) MyBase. OnPaint (pEvent) Eğer Ben. Kontrol Edildi Sonra pEvent. Grafik. FillRectangle (Yeni SolidBrush (CenterSquareColor), CenterSquare) End SubEnd Sınıfını Sonlandırırsa Bitir

(Bu makalede ve sitedeki diğer sitelerde, satırları kısa tutmak için çok sayıda satır sürekliliği kullanılır, böylece web sayfasındaki boşluğa sığarlar.)

Yeni sınıf kodunuzla ilgili ilk fark edeceğiniz şey, ınherits Anahtar kelime. Bu, VB.NET Framework CheckBox öğesinin tüm özelliklerinin ve yöntemlerinin otomatik olarak bunun bir parçası olduğu anlamına gelir. Bunun ne kadar iş tasarrufu sağladığını anlamak için, bir CheckBox bileşeni gibi bir şeyi sıfırdan programlamayı denemelisiniz.

Yukarıdaki kodda dikkat edilmesi gereken iki önemli nokta vardır:

Birincisi, kodun Geçersiz Kıl için gerçekleşecek standart .NET davranışını değiştirmek için OnPaint Etkinlik. Windows ekranınızın bir bölümünün yeniden yapılandırılması gerektiğini fark ettiğinde bir OnPaint olayı tetiklenir. Örnek olarak, başka bir pencere ekranınızın bir bölümünü açtığında verilebilir. Windows ekranı otomatik olarak günceller, ancak kodunuzdaki OnPaint olayını çağırır. (Form ilk oluşturulduğunda OnPaint olayı da çağrılır.) Dolayısıyla, OnPaint'i geçersiz kılarsak, ekrandaki şeylerin şeklini değiştirebiliriz.

İkincisi, Visual Basic CheckBox oluşturma yoludur. Ebeveyn her "İşaretlendiğinde" (yani, Ben mi. Kontrol dır-dir Doğru), NewCheckBox sınıfımızda sağladığımız yeni kod, bir onay işareti çizmek yerine CheckBox'un merkezini yeniden renklendirir.

Geri kalanı denir GDI + kodu. Bu kod, bir Onay Kutusunun ortasıyla aynı boyuttaki bir dikdörtgeni seçer ve GDI + yöntem çağrılarıyla renklendirir. Kırmızı dikdörtgeni "Dikdörtgen (3, 4, 10, 12)" konumlandırmak için "sihirli sayılar" deneysel olarak belirlenmiştir. Doğru görünene kadar değiştirdim.

Geçersiz Kılma prosedürlerinden çıkmadığınızdan emin olmak istediğiniz çok önemli bir adım vardır:

MyBase. OnPaint (pEvent)

Geçersiz kılma, kodunuzun sağlayacağı anlamına gelir herşey olay kodunun. Ama bu nadiren istediğiniz şeydir. Bu nedenle VB, bir olay için yürütülecek normal .NET kodunu çalıştırmak için bir yol sağlar. Bunu yapan ifadedir. Aynı parametreyi (pEvent) geçersiz kılmamış olsaydı çalıştırılacak olay koduna iletir MyBase. OnPaint.

Yeni Denetimi Kullanma

Yeni kontrolümüz araç kutumuzda olmadığından, kodlu formda oluşturulmalıdır. Bunu yapmak için en iyi yer formda Yük olay yordamı.

Form load event yordamı için kod penceresini açın ve şu kodu ekleyin:

Özel Alt frmCustCtrlEx_Load (ByVal gönderici As Sistemi. Sistem Olarak Nesne, ByVal e. EventArgs) MyBase'i işler. Dim customCheckBox'ı Yeni Olarak Yükle newCheckBox () customCheckBox ile .Text = "Özel CheckBox" .Left = oldCheckBox. Sol .Top = oldCheckBox. Üst + eskiKontrol Kutusu. Yükseklik .Size = Yeni Boyut (oldCheckBox. Boyut. Genişlik + 50, eskiCheckBox. Boyut. Yükseklik) Kumandalarla Sonlandır. (CustomCheckBox) End Sub Ekle

Yeni onay kutusunu forma yerleştirmek için, orada zaten bir tane olduğundan ve yalnızca bunun boyutunu ve konumunu kullandık (Text özelliği sığacak şekilde ayarlandı). Aksi takdirde pozisyonu manuel olarak kodlamamız gerekir. MyCheckBox forma eklendiğinde, formu Denetimler koleksiyonuna ekleriz.

Ancak bu kod çok esnek değil. Örneğin, Kırmızı renk sabit kodlanmıştır ve rengi değiştirmek için programın değiştirilmesi gerekir. Onay işareti yerine grafik de isteyebilirsiniz.

İşte yeni, geliştirilmiş bir CheckBox sınıfı. Bu kod, VB.NET nesne yönelimli programlamaya doğru bir sonraki adımların nasıl atılacağını gösterir.

Public Class betterCheckBox CheckBox Özel MerkeziSquareColor As Color = Color öğesini devralır. Blue Private CenterSquareImage As Bitmap Private CenterYeni Dikdörtgen Olarak Kare (3, 4, 10, 12) Korumalı Geçersiz Kılmalar Sub OnPaint _ (ByVal pEvent As _ System. Pencereler. Formlar. PaintEventArgs) MyBase. OnPaint (pEvent) Eğer Ben. CenterSquareImage Hiçbir Şey Değilse Kontrol Edildi Sonra pEvent. Grafik. FillRectangle (Yeni SolidBrush (CenterSquareColor), CenterSquare) Diğer pEvent. Grafik. DrawImage (CenterSquareImage, CenterSquare) End If End If End Sub Public Property FillColor () Renk Olarak Get FillColor = CenterSquareColor End Get Set (Renk Olarak ByVal Değeri) CenterSquareColor = Değer Bitiş Kümesi Bitiş Özelliği Ortak Özellik FillImage () Bitmap Get FillImage = CenterSquareImage Bitiş Get Set (Bitmap Olarak ByVal Değeri) CenterSquareImage = Değer Bitiş Set End PropertyEnd Sınıf

BetterCheckBox Sürümü Neden Daha İyi?

Ana geliştirmelerden biri, iki Özellikleri. Bu eski sınıfın yapmadığı bir şey.

Tanıtılan iki yeni özellik

fillColor

ve

FillImage

Bunun VB.NET'te nasıl çalıştığını görmek için bu basit denemeyi deneyin. Standart bir projeye bir sınıf ekleyin ve ardından kodu girin:

Ne Olursa Olsun Kamusal Mülkiyet

"Al" yazdıktan sonra Enter tuşuna bastığınızda, VB.NET Intellisense tüm Özellik kodu bloğunu doldurur ve tek yapmanız gereken projenizin özelliklerini kodlamaktır. (Get ve Set blokları VB.NET 2010'dan başlayarak her zaman gerekli değildir, bu nedenle en azından Intellisense'e başlatmak için bu kadarını söylemelisiniz.)

Genel Özellik End Get Get Set (ByVal değeri) End SetEnd Property

Bu bloklar yukarıdaki kodda tamamlanmıştır. Bu kod bloklarının amacı, sistemin diğer bölümlerinden özellik değerlerine erişilmesine izin vermektir.

Yöntemlerin eklenmesiyle, tam bir bileşen oluşturma yolunda iyi olacaksınız. Bir yöntemin çok basit bir örneğini görmek için bu kodu betterCheckBox sınıfındaki Özellik bildirimlerinin altına ekleyin:

Kamu Altını Vurgula () Beni. Font = Yeni Sistem. Çizim. Yazı tipi (_ "Microsoft Sans Serif", 12.0!, _ Sistem. Çizim. Yazı stili. Kalın) Ben. Boyut = Yeni Sistem. Çizim. Boyut (200, 35) CenterSquare. Ofset (CenterSquare. Sol - 3, Orta Kare. Üst + 3) Son Sub

Bu yöntem, bir CheckBox'ta görüntülenen Yazı Tipini ayarlamaya ek olarak, kutunun boyutunu ve işaretli dikdörtgenin konumunu yeni boyutu dikkate alacak şekilde ayarlar. Yeni yöntemi kullanmak için, bunu herhangi bir yöntemle aynı şekilde kodlayın:

MyBetterEmphasizedBox. Vurgulamak()

Ve tıpkı Properties gibi Visual Studio da yeni yöntemi otomatik olarak Microsoft'un Intellisense'sine ekler!

Buradaki temel amaç, bir yöntemin nasıl kodlandığını göstermektir. Standart bir CheckBox denetiminin Font'un değiştirilmesine de izin verdiğini bildiğinizden, bu yöntem çok fazla işlev eklemez.

Bu serinin sonraki makalesi olan Özel VB.NET Denetimini Programlama - Temel Ötesi!, Bunu yapan bir yöntem gösterir ve ayrıca özel denetimdeki bir yöntemin nasıl geçersiz kılınacağını açıklar.

instagram story viewer