Προγραμματισμός μιας κλάσης για τη δημιουργία ενός προσαρμοσμένου ελέγχου VB.NET

click fraud protection

Η κατασκευή πλήρων προσαρμοσμένων στοιχείων μπορεί να είναι ένα πολύ προηγμένο έργο. Αλλά μπορείτε να δημιουργήσετε μια κλάση VB.NET που έχει πολλά από τα πλεονεκτήματα μιας συνιστώσας εργαλείων με πολύ λιγότερη προσπάθεια. Εδώ είναι πώς!

Για να πάρετε μια γεύση από αυτό που πρέπει να κάνετε για να δημιουργήσετε ένα πλήρες προσαρμοσμένο στοιχείο, δοκιμάστε αυτό το πείραμα:

-> Ανοίξτε ένα νέο έργο Windows Application στο VB.NET.
-> Προσθέστε ένα πλαίσιο ελέγχου από την εργαλειοθήκη στη φόρμα.
-> Κάντε κλικ στο κουμπί "Εμφάνιση όλων των αρχείων" στο πάνω μέρος της σελίδας Λύση Explorer.

Αυτό θα εμφανίσει τα αρχεία που δημιουργεί το Visual Studio για το έργο σας (έτσι δεν χρειάζεται να). Ως ιστορική υποσημείωση, ο μεταγλωττιστής VB6 έκανε πολλά ίδια πράγματα, αλλά ποτέ δεν θα μπορούσατε να αποκτήσετε πρόσβαση στον κώδικα επειδή ήταν θαμμένος σε καταρτισμένο "p-code". Θα μπορούσατε επίσης να αναπτύξετε προσαρμοσμένους ελέγχους στο VB6, αλλά ήταν πολύ πιο δύσκολο και χρειάστηκε μια ειδική χρησιμότητα που η Microsoft προσέφερε μόνο για το σκοπό αυτό.

instagram viewer

Με τη μορφή Designer.vb αρχείο, θα βρείτε ότι ο παρακάτω κώδικας έχει προστεθεί αυτόματα στις σωστές θέσεις για να υποστηρίξει το στοιχείο CheckBox. (Εάν διαθέτετε διαφορετική έκδοση του Visual Studio, ο κώδικας ενδέχεται να είναι ελαφρώς διαφορετικός.) Αυτός είναι ο κώδικας που γράφει το Visual Studio για εσάς.

Msgstr "Απαιτείται από το Windows Form Designer Ιδιωτικά στοιχεία _ Ως σύστημα. ComponentModel. IContainer'NOTE: Απαιτείται η ακόλουθη διαδικασία 'από τον Windows Designer'. Μπορεί να τροποποιηθεί χρησιμοποιώντας το Windows Form Designer. 'Μην το τροποποιείτε χρησιμοποιώντας τον επεξεργαστή κωδικών. _Private Sub InitializeComponent () Me. CheckBox1 = Νέο σύστημα. Windows. Έντυπα. CheckBox () Με. SuspendLayout () '' CheckBox1 'Εγώ. CheckBox1.AutoSize = True Me. CheckBox1.Location = Νέο σύστημα. Σχέδιο. Σημείο (29, 28) Εγώ. CheckBox1.Name = "CheckBox1".. . και ούτω καθεξής ...

Αυτός είναι ο κώδικας που πρέπει να προσθέσετε στο πρόγραμμά σας για τη δημιουργία ενός προσαρμοσμένου ελέγχου. Λάβετε υπόψη ότι όλες οι μέθοδοι και οι ιδιότητες του πραγματικού ελέγχου CheckBox είναι σε μια κλάση που παρέχεται από το .NET Framework: Σύστημα. Windows. Έντυπα. CheckBox. Αυτό δεν είναι μέρος του έργου σας, επειδή είναι εγκατεστημένο στα Windows για όλα τα προγράμματα .NET. Αλλά υπάρχει ένα παρτίδα από αυτό.

Ένα άλλο σημείο που πρέπει να γνωρίζετε είναι ότι αν χρησιμοποιείτε WPF (Windows Presentation Foundation), η κλάση .NET CheckBox προέρχεται από μια εντελώς διαφορετική βιβλιοθήκη που ονομάζεται Σύστημα. Windows. Έλεγχοι. Αυτό το άρθρο λειτουργεί μόνο για μια εφαρμογή Windows Forms, αλλά οι αρχές της κληρονομιάς εδώ δουλεύουν για οποιοδήποτε έργο VB.NET.

Υποθέστε ότι το σχέδιό σας χρειάζεται έλεγχο που μοιάζει πολύ με έναν από τους τυπικούς ελέγχους. Για παράδειγμα, ένα πλαίσιο ελέγχου που άλλαξε χρώμα ή εμφάνισε ένα μικροσκοπικό "χαρούμενο πρόσωπο" αντί να εμφανίσει το μικρό γραφικό "έλεγχο". Θα χτίσουμε μια τάξη που θα κάνει αυτό και θα σας δείξει πώς να την προσθέσετε στο έργο σας. Ενώ αυτό μπορεί να είναι χρήσιμο από μόνο του, ο πραγματικός στόχος είναι να αποδείξει το VB.NET κληρονομία.

Ας αρχίσουμε την κωδικοποίηση

Για να ξεκινήσετε, αλλάξτε το όνομα του CheckBox που μόλις προσθέσατε oldCheckBox. (Ίσως θελήσετε να σταματήσετε να εμφανίζετε ξανά "Εμφάνιση όλων των αρχείων" για να απλοποιήσετε την Εξερεύνηση λύσεων.) Τώρα προσθέστε μια νέα κλάση στο έργο σας. Υπάρχουν διάφοροι τρόποι για να το κάνετε αυτό, συμπεριλαμβανομένου του δεξιού κλικ στο έργο στο Explorer Solution και επιλέγοντας "Add" ή "Class" ή επιλέγοντας "Add Class" κάτω από το στοιχείο μενού Project. Αλλάξτε το όνομα αρχείου της νέας κλάσης σε newCheckBox για να κρατήσει τα πράγματα ευθεία. Τέλος, ανοίξτε το παράθυρο κώδικα για την κλάση και προσθέστε αυτόν τον κώδικα:

Δημόσια κλάση newCheckBox κληρονομεί το ιδιωτικό κέντρο CheckBoxSquareColor ως χρώμα = χρώμα. Το κόκκινο προστατευμένο αντικαθιστά το SubPaint (ByVal pEvent _ Ως PaintEventArgs) Dim CenterSquare _ Ως νέο ορθογώνιο (3, 4, 10, 12) MyBase. OnPaint (pEvent) Εάν εγώ. Έλεγχος στη συνέχεια pEvent. Γραφικά. FillRectangle (Νέο SolidBrush (CenterSquareColor), CenterSquare) Τέλος Αν τελειώνει η κλάση SubEnd

(Σε αυτό το άρθρο και σε άλλες ιστοσελίδες, πολλές γραμμικές συνέχειες χρησιμοποιούνται για να κρατήσουν σύντομες γραμμές ώστε να χωρέσουν στον διαθέσιμο χώρο της ιστοσελίδας.)

Το πρώτο πράγμα που θα παρατηρήσετε για το νέο κωδικό τάξης σας είναι το Κληρονομεί λέξη-κλειδί. Αυτό σημαίνει ότι όλες οι ιδιότητες και οι μέθοδοι ενός VB.NET Framework CheckBox αποτελούν αυτόματα μέρος αυτού. Για να εκτιμήσετε πόση προσπάθεια εξοικονομείτε, πρέπει να έχετε δοκιμάσει από το μηδέν τον προγραμματισμό κάποιου στοιχείου CheckBox.

Υπάρχουν δύο βασικά πράγματα που πρέπει να παρατηρήσετε στον παραπάνω κώδικα:

Το πρώτο είναι οι χρήσεις του κώδικα Καταπατώ να αντικαταστήσει την τυπική συμπεριφορά .NET που θα πραγματοποιηθεί για ένα OnPaint Εκδήλωση. Ένα συμβάν OnPaint ενεργοποιείται κάθε φορά που τα Windows παρατηρούν ότι μέρος της οθόνης σας πρέπει να ανακατασκευαστεί. Ένα παράδειγμα θα ήταν όταν ένα άλλο παράθυρο αποκαλύπτει μέρος της οθόνης σας. Τα Windows ενημερώνουν αυτόματα την οθόνη, αλλά στη συνέχεια καλούν το συμβάν OnPaint στον κωδικό σας. (Το συμβάν OnPaint ονομάζεται επίσης όταν αρχικά δημιουργηθεί η φόρμα.) Έτσι, αν ξεπεράσουμε το OnPaint, μπορούμε να αλλάξουμε τον τρόπο που φαίνονται τα πράγματα στην οθόνη.

Ο δεύτερος είναι ο τρόπος που η Visual Basic δημιουργεί το CheckBox. Κάθε φορά που ο γονέας είναι "Έλεγχος" (δηλαδή, Μου. Τετραγωνισμένος είναι Αληθής) τότε ο νέος κώδικας που παρέχουμε στην κλάση NewCheckBox θα ξεκαθαρίσει το κέντρο του CheckBox αντί να σχεδιάσει ένα σημάδι επιλογής.

Το υπόλοιπο είναι αυτό που ονομάζεται Κωδικός GDI +. Αυτός ο κώδικας επιλέγει ένα ορθογώνιο ίδιο μέγεθος με το κέντρο ενός κουτιού ελέγχου και τα χρωμάτισε με κλήσεις μεθόδου GDI +. Οι "μαγικοί αριθμοί" για να τοποθετήσουν το κόκκινο ορθογώνιο, "Rectangle (3, 4, 10, 12)", προσδιορίστηκαν πειραματικά. Το άλλαξα μόνο μέχρι να φαινόταν σωστό.

Υπάρχει ένα πολύ σημαντικό βήμα που θέλετε να βεβαιωθείτε ότι δεν ξεφεύγετε από τις διαδικασίες Override:

MyBase. OnPaint (pEvent)

Αντικατάσταση σημαίνει ότι ο κωδικός σας θα παρέχει όλα του κώδικα για την εκδήλωση. Αλλά αυτό είναι σπάνια αυτό που θέλετε. Έτσι, η VB παρέχει έναν τρόπο να εκτελέσει τον κανονικό .NET κώδικα που θα είχε εκτελεστεί για ένα συμβάν. Αυτή είναι η δήλωση που κάνει αυτό. Περνά την ίδια ίδια παράμετρο-pEvent-στον κώδικα συμβάντος που θα είχε εκτελεστεί αν δεν είχε παραβιαστεί, MyBase. OnPaint.

Χρησιμοποιώντας τον νέο έλεγχο

Επειδή ο νέος μας έλεγχος δεν βρίσκεται στην εργαλειοθήκη μας, πρέπει να δημιουργηθεί στη μορφή με τον κώδικα. Το καλύτερο μέρος για να γίνει αυτό είναι στη μορφή Φορτώνω διαδικασία συμβάντων.

Ανοίξτε το παράθυρο κώδικα για τη διαδικασία συμβάντος φόρτωσης φορμών και προσθέστε αυτόν τον κώδικα:

Private Sub frmCustCtrlEx_Load (ByVal αποστολέας ως σύστημα. Αντικείμενο, ByVal e ως σύστημα. EventArgs) χειρίζεται το MyBase. Φόρτωση Dim customCheckBox Ως νέο newCheckBox () Με customCheckBox .Text = "Custom CheckBox" .Left = oldCheckBox. Αριστερό. Top = oldCheckBox. Top + oldCheckBox. Ύψος. Μεγέθυνση = Νέο μέγεθος (oldCheckBox. Μέγεθος. Πλάτος + 50, oldCheckBox. Μέγεθος. Ύψος) Τέλος με στοιχεία ελέγχου. Προσθήκη (customCheckBox) End Sub

Για να τοποθετήσετε το νέο πλαίσιο ελέγχου στη φόρμα, επωφεληθήκαμε από το γεγονός ότι υπάρχει ήδη ένα από αυτά και απλώς χρησιμοποιήθηκε το μέγεθος και η θέση αυτού (προσαρμοσμένο έτσι ώστε να χωράει η ιδιότητα κειμένου). Διαφορετικά θα έπρεπε να κωδικοποιήσουμε τη θέση με το χέρι. Όταν το MyCheckBox έχει προστεθεί στη φόρμα, προσθέτουμε στη συλλογή Controls.

Αλλά αυτός ο κώδικας δεν είναι πολύ ευέλικτος. Για παράδειγμα, το χρώμα Κόκκινο είναι hardcoded και η αλλαγή του χρώματος απαιτεί την αλλαγή του προγράμματος. Μπορεί επίσης να θέλετε ένα γραφικό αντί για ένα σημάδι επιλογής.

Εδώ είναι μια νέα, βελτιωμένη κλάση CheckBox. Αυτός ο κώδικας σας δείχνει πώς να κάνετε κάποια από τα επόμενα βήματα προς τον προγραμματισμό αντικειμένων VB.NET.

Δημόσια κλάση betterCheckBox κληρονομεί το ιδιωτικό κέντρο CheckBoxSquareColor ως χρώμα = χρώμα. Blue Private CenterSquareImage ως ιδιωτικό κέντρο bitmap ως νέος ορθογώνιος (3, 4, 10, 12) προστατευμένος αντικαταστάτης SubPaint _ (ByVal pEvent As _ System. Windows. Έντυπα. PaintEventArgs) MyBase. OnPaint (pEvent) Εάν εγώ. Έλεγχος στη συνέχεια, εάν το CenterSquareImage δεν είναι τίποτα τότε pEvent. Γραφικά. FillRectangle (Νέο SolidBrush (CenterSquareColor), CenterSquare) Άλλο pEvent. Γραφικά. DrawImage (CenterSquareImage, CenterSquare) Τέλος Αν τέλος Αν τελειώσει Υπό Δημοσία Ιδιότητα FillColor () Ως Χρώμα Λάβετε FillColor = Τέλος CenterSquareColor Καθορισμός (ByVal Value ως Color) CenterSquareColor = Value End End Set Property End Δημόσια Ιδιοκτησία FillImage () As Bitmap Λήψη FillImage = Λήξη τερματισμού του CenterSquareImage (Τιμή ByVal ως bitmap) CenterSquareImage = Ορισμός τερματισμού αξίας End PropertyEnd Τάξη

Γιατί η έκδοση του BetterCheckBox είναι καλύτερη

Μία από τις βασικές βελτιώσεις είναι η προσθήκη δύο Ιδιότητες. Αυτό είναι κάτι που η παλιά τάξη δεν έκανε καθόλου.

Οι δύο νέες ιδιότητες που εισάγονται είναι

Χρώμα γεμίσματος

και

FillImage

Για να πάρετε μια γεύση του πώς λειτουργεί αυτό στο VB.NET, δοκιμάστε αυτό το απλό πείραμα. Προσθέστε μια τάξη σε ένα τυπικό έργο και στη συνέχεια πληκτρολογήστε τον κώδικα:

Δημόσια Ιδιοκτησία Ό, τι παίρνει

Όταν πατάτε Enter μετά την πληκτρολόγηση του "Get", το VB.NET Intellisense συμπληρώνει ολόκληρο το block code Property και το μόνο που έχετε να κάνετε είναι να κωδικοποιήσετε τις λεπτομέρειες για το έργο σας. (Τα μπλοκ Get & Set δεν απαιτούνται πάντοτε ξεκινώντας με το VB.NET 2010, οπότε πρέπει τουλάχιστον να πείτε στο Intellisense τόσο πολύ ώστε να το ξεκινήσετε.)

Δημόσια Ιδιοκτησία Όποια και αν είναι η Απόκτηση Ενεργοποίησης (ByVal value) Τέλος SetEnd Property

Αυτά τα μπλοκ έχουν συμπληρωθεί στον παραπάνω κώδικα. Ο σκοπός αυτών των μπλοκ κώδικα είναι να επιτρέπεται η πρόσβαση σε τιμές ιδιοκτησίας από άλλα μέρη του συστήματος.

Με την προσθήκη μεθόδων, θα είστε καλά στο δρόμο για τη δημιουργία μιας πλήρους συνιστώσας. Για να δείτε ένα πολύ απλό παράδειγμα μιας μεθόδου, προσθέστε αυτόν τον κώδικα κάτω από τις δηλώσεις ιδιότητας στην κλάση betterCheckBox:

Δημόσια υπογράμμιση () Με. Γραμματοσειρά = Νέο σύστημα. Σχέδιο. Γραμματοσειρά (_ "Microsoft Sans Serif", 12.0!, _ System. Σχέδιο. Στυλ γραμματοσειράς. Έντονα) Εγώ. Μέγεθος = Νέο σύστημα. Σχέδιο. Μέγεθος (200, 35) CenterSquare. Μετατόπιση (CenterSquare. Αριστερά - 3, ΚέντροSquare. Κορυφή + 3) Τέλος Υποσ

Εκτός από την προσαρμογή της γραμματοσειράς που εμφανίζεται σε ένα πλαίσιο ελέγχου, αυτή η μέθοδος προσαρμόζει επίσης το μέγεθος του κουτιού και τη θέση του ελεγχόμενου ορθογωνίου για να υπολογίσει το νέο μέγεθος. Για να χρησιμοποιήσετε τη νέα μέθοδο, απλώς κωδικοποιήστε την με τον ίδιο τρόπο που θα χρησιμοποιούσατε οποιαδήποτε μέθοδο:

MyBetterEmphasizedBox. Τονίζω()

Και ακριβώς όπως οι Ιδιότητες, το Visual Studio προσθέτει αυτόματα τη νέα μέθοδο στο Intellisense της Microsoft!

Ο κύριος στόχος εδώ είναι να δείξουμε απλά πώς κωδικοποιείται μια μέθοδος. Ενδέχεται να γνωρίζετε ότι ένας τυπικός έλεγχος CheckBox επιτρέπει επίσης τη μεταβολή της γραμματοσειράς, οπότε αυτή η μέθοδος δεν προσθέτει πραγματικά πολλές λειτουργίες.

Το επόμενο άρθρο αυτής της σειράς, Προγραμματισμός ενός προσαρμοσμένου ελέγχου VB.NET - πέρα ​​από τα βασικά!, δείχνει μια μέθοδο που κάνει και επίσης εξηγεί πώς να παρακάμψετε μια μέθοδο σε έναν προσαρμοσμένο έλεγχο.

instagram story viewer