Програмиране на клас за създаване на персонализиран VB.NET контрол

Изграждането на цялостни потребителски компоненти може да бъде много напреднал проект. Но можете да изградите клас VB.NET, който има много от предимствата на компонент с инструменти с много по-малко усилия. Ето как!

За да получите вкус за това какво трябва да направите, за да създадете пълен персонализиран компонент, опитайте този експеримент:

-> Отворете нов проект за приложение на Windows във VB.NET.
-> Добавете CheckBox от кутията с инструменти към формата.
-> Кликнете върху бутона „Покажи всички файлове“ в горната част на Solution Explorer.

Това ще покаже файловете, които Visual Studio създава за вашия проект (така че не е нужно). Като историческа бележка под линия компилаторът на VB6 направи много едни и същи неща, но никога не можехте да получите достъп до кода, защото той беше погребан в компилиран „p-код“. Бихте могли да разработите персонализирани контроли и в VB6, но това беше много по-трудно и изискваше специална програма, която Microsoft доставя точно за тази цел.

Във формата Designer.vb

instagram viewer
файл, ще откриете, че кодът по-долу е добавен автоматично на правилните места, за да поддържа компонента CheckBox. (Ако имате различна версия на Visual Studio, кодът ви може да е малко по-различен.) Това е кодът, който Visual Studio пише за вас.

„Изисква се от Частните компоненти на Windows Form Designer - като система. ComponentModel. IContainer 'ЗАБЕЛЕЖКА: Необходима е следната процедура' чрез дизайнера на формуляри на Windows ', може да бъде променена с помощта на Windows Form Designer.' Не го променяйте с помощта на редактора на кода. _Private Sub InitializeComponent () Аз. CheckBox1 = Нова система. Windows. Форми. CheckBox () Аз. SuspendLayout () '' CheckBox1 'Me. CheckBox1.AutoSize = True Me. CheckBox1.Location = Нова система. Рисуване. Точка (29, 28) Аз. CheckBox1.Name = "CheckBox1".. . и така нататък ...

Това е кодът, който трябва да добавите към програмата си, за да създадете персонализиран контрол. Имайте предвид, че всички методи и свойства на действителния CheckBox контрол са в клас, предоставен от .NET Framework: Система. Windows. Форми. отметката. Това не е част от вашия проект, тъй като е инсталиран в Windows за всички .NET програми. Но има един много от него.

Друг момент, който трябва да знаете е, че ако използвате WPF (Фондация за презентация на Windows), класът .NET CheckBox идва от съвсем различна библиотека с име Система. Windows. Контроли. Тази статия работи само за приложение на Windows Forms, но тук принципите на наследяване работят за всеки VB.NET проект.

Да предположим, че вашият проект се нуждае от контрол, който много прилича на един от стандартните контроли. Например, квадратче за отметка, което промени цвета или показа миниатюрно „щастливо лице“, вместо да показва малката графика „чек“. Ще изградим клас, който прави това и ще ви покажем как да го добавите към вашия проект. Въпреки че това може да бъде полезно само по себе си, истинската цел е да се демонстрират VB.NET наследяване.

Нека започнем кодирането

За да започнете, променете името на CheckBox, което току-що добавихте oldCheckBox. (Може да искате да спрете да показвате отново „Покажи всички файлове“, за да опростите Solution Explorer.) Сега добавете нов клас към вашия проект. Има няколко начина да направите това, като щракнете с десния бутон на мишката върху проекта в Explorer Solution и изберете "Add", след това "Class" или изберете "Add Class" под под менюто Project. Променете името на файла на новия клас на newCheckBox за да поддържат нещата прави. И накрая, отворете прозореца с код за класа и добавете този код:

Публичен клас newCheckBox наследства CheckBox частен центърSquareColor като цвят = цвят. Червено защитени отметки Sub OnPaint (ByVal pEvent _ като PaintEventArgs) Dim CenterSquare _ Като нов правоъгълник (3, 4, 10, 12) MyBase. OnPaint (pEvent) Ако аз. Тогава проверено pEvent. Graphics. FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) End If End SubEnd Class

(В тази статия и в други на сайта се използват много продължения на линиите, за да се поддържат късите линии, така че да се впишат в пространството, достъпно на уеб страницата.)

Първото нещо, което забележите за вашия нов клас код, е наследява ключова дума. Това означава, че всички свойства и методи на VB.NET Framework CheckBox са автоматично част от тази. За да оцените колко много спестява тази работа, трябва да сте опитали да програмирате нещо като CheckBox компонент от нулата.

Има две ключови неща, които трябва да забележите в горния код:

Първият е използваният код Замяна за да замени стандартното поведение .NET, което ще се проведе за OnPaint събитие. OnPaint събитие се задейства, когато Windows забележи, че част от вашия дисплей трябва да бъде реконструирана. Пример може да бъде, когато друг прозорец разкрие част от вашия дисплей. Windows актуализира дисплея автоматично, но след това извиква събитието OnPaint във вашия код. (Събитието OnPaint се нарича също, когато формата е създадена първоначално.) Така че, ако преодолеем OnPaint, можем да променим начина, по който нещата изглеждат на екрана.

Вторият е начинът, по който Visual Basic създава CheckBox. Всеки път, когато родителят е "проверен" (т.е. Мен. Проверени е Вярно), след това новият код, който предоставяме в нашия клас NewCheckBox, ще прецъфти центъра на CheckBox, вместо да нарисува отметка.

Останалото е това, което се нарича GDI + код. Този код избира правоъгълник с точно същия размер като центъра на квадратчето и го оцветява при обаждания на метод GDI +. „Магическите числа“ за позициониране на червения правоъгълник, „Правоъгълник (3, 4, 10, 12)“, бяха определени експериментално. Просто го смених, докато изглеждаше правилно.

Има една много важна стъпка, която искате да сте сигурни, че не се отказвате от процедурите на замяна:

MyBase. OnPaint (pEvent)

Отмяна означава, че кодът ви ще предостави всичко от кода за събитието. Но това рядко е това, което искате. Така VB предоставя начин за стартиране на нормалния .NET код, който би бил изпълнен за събитие. Това е твърдението, което прави това. Той предава същия същия параметър - pEvent - към кода на събитието, който би бил изпълнен, ако не беше отменен, MyBase. OnPaint.

Използване на новото управление

Тъй като новият ни контрол не е в нашата кутия с инструменти, той трябва да бъде създаден във формата с код. Най-доброто място за това е във формата натоварване процедура на събитието.

Отворете прозореца с код за процедурата на събитието за зареждане на формата и добавете този код:

Частен Sub frmCustCtrlEx_Load (ByVal подател като система. Обект, ByVal e като система. EventArgs) Работи с MyBase. Заредете Dim customCheckBox като нов newCheckBox () С customCheckBox .Text = "Персонализиран CheckBox" .Left = oldCheckBox. Ляво .Top = oldCheckBox. Най-горе + oldCheckBox. Височина. Размер = Нов размер (oldCheckBox Размер. Ширина + 50, oldCheckBox. Размер. Височина) Край с контроли. Добавете (customCheckBox) End Sub

За да поставим новата отметка във формата, ние се възползвахме от факта, че вече има такъв и просто използвахме размера и позицията на тази (коригирана така, че свойството Text да пасне). В противен случай ще трябва да кодираме позицията ръчно. Когато MyCheckBox е добавен към формата, ние го добавяме към колекцията Controls.

Но този код не е много гъвкав. Например, червеният цвят е твърдо кодиран и промяната на цвета изисква промяна на програмата. Можете също да искате графика вместо отметка.

Ето нов, подобрен клас CheckBox. Този код ви показва как да направите някои от следващите стъпки към обектно ориентирано програмиране на VB.NET.

Public Class betterCheckBox Inherits CheckBox Private CenterSquareColor As Color = Цвят. Blue Private CenterSquareImage като Bitmap Private CenterSquare като нов правоъгълник (3, 4, 10, 12) Защитени отметки Sub OnPaint _ (ByVal pEvent As _ System). Windows. Форми. PaintEventArgs) MyBase. OnPaint (pEvent) Ако аз. След това се проверява, ако CenterSquareImage е нищо, тогава pEvent. Graphics. FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) Else pEvent. Graphics. DrawImage (CenterSquareImage, CenterSquare) End If End Ако End Sub Sub Public Public FillColor () като цвят Вземете FillColor = CenterSquareColor End Get Set (ByVal Value като цвят) CenterSquareColor = Стойност End End Set Public Public FillImage () Като Bitmap Вземете FillImage = CenterSquareImage End Get Set (ByVal Value As Bitmap) CenterSquareImage = Value End Set End PropertyEnd клас

Защо версията на BetterCheckBox е по-добра

Едно от основните подобрения е добавянето на две Имоти. Това е нещо, което старият клас изобщо не правеше.

Двете нови свойства са въведени

FillColor

и

FillImage

За да получите вкус как става това във VB.NET, опитайте този прост експеримент. Добавете клас към стандартен проект и след това въведете кода:

Публична собственост каквото и да получите

Когато натиснете Enter, след като напишете „Вземи“, VB.NET Intellisense попълва целия блок код на свойството и всичко, което трябва да направите, е да кодирате спецификите за вашия проект. (Блоковете Get and Set не винаги се изискват, като се започне с VB.NET 2010, така че трябва поне да кажете на Intellisense толкова много, за да го стартирате.)

Публична собственост каквото и да се свърши Get Set (ByVal стойност) End SetEnd Property

Тези блокове са завършени в горния код. Целта на тези блокове от кодове е да позволят достъп до стойностите на свойствата от други части на системата.

С добавянето на методи ще бъдете на път да създадете цялостен компонент. За да видите много прост пример за метод, добавете този код под декларациите на свойствата в класа на betterCheckBox:

Публично подчертайте мен. Шрифт = Нова система. Рисуване. Шрифт (_ "Microsoft Sans Serif", 12.0!, _ System. Рисуване. FontStyle. Смело) Аз. Размер = Нова система. Рисуване. Размер (200, 35) CenterSquare. Отместване (CenterSquare. Отляво - 3, CenterSquare. Нагоре + 3) Край Sub

В допълнение към регулирането на Шрифта, показан в CheckBox, този метод също регулира размера на полето и местоположението на отметения правоъгълник, за да отчете новия размер. За да използвате новия метод, просто го кодирайте по същия начин, както и всеки метод:

MyBetterEmphasizedBox. Наблегне ()

И точно като Properties, Visual Studio автоматично добавя новия метод към Intellisense на Microsoft!

Основната цел тук е просто да се демонстрира как се кодира метод. Може да сте наясно, че стандартното контролно устройство CheckBox също позволява да се променя шрифта, така че този метод всъщност не добавя много функции.

Следващата статия от тази поредица, Програмиране на персонализиран VB.NET контрол - отвъд основите!, показва метод, който прави, и също така обяснява как да се отмени методът в персонализирано управление.

instagram story viewer