Програмирање класе за креирање прилагођене ВБ.НЕТ контроле

Изградња комплетних прилагођених компоненти може бити веома напредан пројекат. Али можете да изградите ВБ.НЕТ класу која има многе предности компоненте са алаткама са много мање напора. Ево како!

Да бисте добили укус о томе шта треба да урадите да бисте направили комплетну прилагођену компоненту, испробајте овај експеримент:

-> Отворите нови пројекат Виндовс апликације у ВБ.НЕТ-у.
-> У образац додајте ЦхецкБок из Тоолбок-а.
-> Кликните на дугме "Прикажи све датотеке" на врху Солутион Екплорер.

Ово ће приказати датотеке које Висуал Студио креира за ваш пројекат (тако да не морате). Као историјска фуснота, ВБ6 преводилац је урадио пуно истих ствари, али никада нисте могли да приступите коду јер је сахрањен у компајлираном "п-коду". И у ВБ6 бисте могли развити прилагођене контроле, али било је много теже и захтевао је посебан услужни програм који је Мицрософт испоручио управо у ту сврху.

У облику Десигнер.вб датотеке, видјет ћете да је код доље аутоматски додан на правим локацијама да подржи компоненту ЦхецкБок. (Ако имате другу верзију Висуал Студио-а, ваш код може бити мало другачији.) Ово је код који Висуал Студио пише за вас.

instagram viewer

'Захтијева Виндовс дизајнер образаца Приватне компоненте _ као систем. ЦомпонентМодел. ИЦонтаинер 'НАПОМЕНА: Следећи поступак је потребан' помоћу дизајнера Виндовс обрасца 'Могуће је изменити помоћу Виндовс Обликовача образаца.' Не мењајте га помоћу уређивача кода. _Привате Суб ИнитиализеЦомпонент () Ја. ЦхецкБок1 = Нови систем. Виндовс. Обрасци. ЦхецкБок () Ја. СуспендЛаиоут () '' ЦхецкБок1 'Ме. ЦхецкБок1.АутоСизе = Тачно ја. ЦхецкБок1.Лоцатион = Нови систем. Цртање. Тачка (29, 28) Ја. ЦхецкБок1.Наме = "ЦхецкБок1".. . и тако даље ...

Ово је код који морате додати свом програму да бисте креирали прилагођену контролу. Имајте на уму да су све методе и својства стварне ЦхецкБок контроле у ​​класи коју обезбеђује .НЕТ Фрамеворк: Систем. Виндовс. Обрасци. Поље за потврду. Ово није део вашег пројекта, јер је инсталиран у Виндовс-у за све .НЕТ програме. Али постоји пуно од тога.

Још једна ствар коју треба бити свестан је да ако користите ВПФ (Виндовс Пресентатион Фоундатион), .НЕТ ЦхецкБок класа долази из потпуно друге библиотеке која се зове Систем. Виндовс. Контроле. Овај чланак функционише само за Виндовс Формс апликацију, али принципи наследства овде раде за било који ВБ.НЕТ пројекат.

Претпоставимо да ваш пројекат треба контролу која је врло слична једној од стандардних контрола. На пример, потврдни оквир који је променио боју или приказао сићушно „срећно лице“ уместо да прикаже малу „чек“ графику. Изградићемо класу која то ради и показаћемо вам како да је додате свом пројекту. Иако би ово могло бити корисно само по себи, прави циљ је показати ВБ.НЕТ-ове наслеђивање.

Почнимо кодирање

Да бисте започели, промените име ЦхецкБок-а које сте управо додали олдЦхецкБок. (Можда бисте желели да престанете са приказивањем „Прикажи све датотеке“ поново да бисте поједноставили Истраживач решења.) Сада додајте нову класу у свој пројекат. Постоји неколико начина да се то уради, укључујући десну типку миша кликните пројекат у програму Солутион Екплорер и изаберите „Додај“, затим „Класа“ или изаберите „Додај класу“ испод ставке „Пројектни мени“. Промените име датотеке нове класе у невЦхецкБок да ствари буду исправне. На крају, отворите прозор кода за класу и додајте овај код:

Јавна класа новаЦхецкБок наследства ЦхецкБок Привате ЦентерСкуареЦолор Ас Цолор = Боја. Ред Протецтед Оверридес Суб ОнПаинт (БиВал пЕвент _ Као ПаинтЕвентАргс) Дим ЦентерСкуаре _ Као нови правоугаоник (3, 4, 10, 12) МиБасе. ОнПаинт (пЕвент) Иф Ме. Проверено затим пЕвент. Графика ФиллРецтангле (Нови СолидБрусх (ЦентерСкуареЦолор), ЦентерСкуаре) Енд Иф Енд СубЕнд класа

(У овом чланку и у осталим на веб локацији, користи се много наставка линија да би се кратке линије смањиле како би се уклопиле у простор доступан на веб страници.)

Прво што ћете приметити код нове класе кода је Наследи кључна реч. То значи да су сва својства и методе ВБ.НЕТ Фрамеворк ЦхецкБок-а аутоматски део овог. Да бисте схватили колико овог рада штедите, морате испробати програмирање нечега као што је ЦхецкБок компонента испочетка.

У коду изнад требате приметити две кључне ствари:

Прва је употреба кода Прегазити заменити стандардно .НЕТ понашање које би се одвијало за ан ОнПаинт догађај. ОнПаинт догађај се покреће сваки пут када Виндовс примети да мора да се реконструише део вашег екрана. Пример би био када други прозор открива део вашег екрана. Виндовс ажурира екран аутоматски, али тада позива догађај ОнПаинт у вашем коду. (ОнПаинт догађај се такође назива када је образац првобитно креиран.) Дакле, ако прегласимо ОнПаинт, можемо променити начин на који ствари изгледају на екрану.

Други је начин на који Висуал Басиц креира ЦхецкБок. Кад год је родитељ „проверен“ (тј. Ја. Проверено је Истина) тада ће нови код који пружамо у нашој класи НевЦхецкБок обојити средиште ЦхецкБока уместо да црта квачицу.

Остало је оно што се зове ГДИ + код. Овај код одабире правоугаоник потпуно исте величине као средина контролне кутије и боји га у позиве ГДИ + методе. „Магични бројеви“ за позиционирање црвеног правоугаоника, „Правоугаоник (3, 4, 10, 12)“, одређени су експериментално. Само сам га мењао док није изгледао како треба.

Постоји један врло важан корак којим желите да будете сигурни да се не изостављате из поступка Прекомерног пописа:

МиБасе. ОнПаинт (пЕвент)

Прекорачење значи да ће вам код пружити све кода догађаја. Али ово је ретко оно што желите. Дакле, ВБ пружа начин покретања нормалног .НЕТ кода који би био изведен за догађај. То је изјава која то чини. Она прослеђује исти тај параметар - пЕвент - коду догађаја који би био извршен да није прегласана, МиБасе. ОнПаинт.

Употреба нове контроле

Пошто се наша нова контрола не налази у нашем алату за алат, она се мора креирати у облику са кодом. Најбоље место за то је у форми Оптерећење поступак догађаја.

Отворите прозор кода за поступак учитавања обрасца обрасца и додајте овај код:

Привате Суб фрмЦустЦтрлЕк_Лоад (БиВал пошиљалац као систем. Објект, БиВал е Ас Систем. ЕвентАргс) Рукује МиБасе. Учитај Дим цустомЦхецкБок као нови невЦхецкБок () са цустомЦхецкБок .Тект = "Прилагођени ЦхецкБок" .Лефт = олдЦхецкБок. Лево .Топ = олдЦхецкБок. Топ + олдЦхецкБок. Висина .Сизе = Нова величина (олдЦхецкБок Величина. Ширина + 50, олдЦхецкБок. Величина. Висина) Крај са контролама. Додајте (цустомЦхецкБок) крајњу пот

Да бисмо поставили нови потврдни оквир на образац, искористили смо чињеницу да га већ постоји и управо смо искористили величину и положај тог (подешен тако да својство Тект одговара). У супротном бисмо позицију морали ручно да кодирамо. Када се МиЦхецкБок дода у образац, додамо га у колекцију Цонтролс.

Али овај код није баш флексибилан. На пример, црвена боја је тврдо кодирана и промена боје захтева промену програма. Такође ћете желети графику уместо квачице.

Ево нове, побољшане класе ЦхецкБок. Овај код показује како да предузмете неке од наредних корака према ВБ.НЕТ објектно оријентисаном програмирању.

Јавна класа беттерЦхецкБок Насљедства ЦхецкБок Привате ЦентерСкуареЦолор Ас Цолор = Боја. Плави приватни центарСкуареИмаге као битмап приватни центарСкуаре као нови правокутник (3, 4, 10, 12) Заштићени преклапања Суб ОнПаинт _ (БиВал пЕвент Ас _ Систем). Виндовс. Обрасци. ПаинтЕвентАргс) МиБасе. ОнПаинт (пЕвент) Иф Ме. Проверено онда ако ЦентерСкуареИмаге није ништа онда пЕвент. Графика ФиллРецтангле (Нев СолидБрусх (ЦентерСкуареЦолор), ЦентерСкуаре) Елсе пЕвент. Графика ДравИмаге (ЦентерСкуареИмаге, ЦентерСкуаре) Енд Иф Енд Ако Крај Суб Суб јавна својина ФиллЦолор () као боја Гет ФиллЦолор = ЦентерСкуареЦолор Енд Гет Сет (БиВал Валуе Ас Цолоур) ЦентерСкуареЦолор = Валуе Енд Сет Енд Јавна својина ФиллИмаге () Као битмап Добивање ФиллИмаге = ЦентерСкуареИмаге Енд Гет Сет (БиВал вредност као Битмап) ЦентерСкуареИмаге = Вриједност завршетка Сет Енд Енд ПропертиЕнд Класа

Зашто је верзија БеттерЦхецкБок боља

Једно од главних побољшања је додавање два Својства. То је нешто што стари разред није уопште радио.

Уведене су две нове особине

Попунити боју

и

ФиллИмаге

Да бисте добили укус о томе како ово функционише у ВБ.НЕТ-у, испробајте овај једноставан експеримент. Додајте класу у стандардни пројекат, а затим унесите код:

Јавна својина Шта год да добијете

Када притиснете Ентер након што упишете "Гет", ВБ.НЕТ Интеллисенсе испуњава читав блок некретнине и све што требате учинити је да кодирате специфичности вашег пројекта. (Блокови Гет и Сет нису увек потребни почевши од ВБ.НЕТ 2010, тако да морате барем рећи Интеллисенсе-у толико много да бисте га покренули.)

Јавна својина Без обзира на крај Гет Сет Сет (БиВал вредност) Енд СетЕнд Пропертиес

Ови блокови су завршени горе наведеним кодом. Сврха ових блокова кода је омогућавање приступа вриједностима својстава из других дијелова система.

Додавањем метода, били бисте на добром путу да створите комплетну компоненту. Да бисте видели врло једноставан пример методе, додајте овај код испод декларације својства у разреду беттерЦхецкБок:

Јавни суб нагласак () Ја. Фонт = Нови систем. Цртање. Фонт (_ "Мицрософт Санс Сериф", 12.0!, _ Систем. Цртање. Тип слова. Болд) Ја. Величина = Нови систем. Цртање. Величина (200, 35) ЦентерСкуаре. Оффсет (ЦентерСкуаре). Лево - 3, ЦентерСкуаре. На врх + 3) Крај Суб

Поред прилагођавања Фонтова приказаног у ЦхецкБок-у, ова метода прилагођава и величину оквира и локацију провереног правоугаоника како би се добила нова величина. Да бисте користили нову методу, само је кодирајте на исти начин као и било који метод:

МиБеттерЕмпхасизедБок. Нагласити()

И баш као што је Својства, Висуал Студио аутоматски додаје нови метод у Мицрософтов Интеллисенсе!

Главни циљ овде је једноставно показати како се метода кодира. Можда сте свесни да стандардна контрола ЦхецкБок-а такође омогућава промену Фонт-а, тако да ова метода не додаје много функције.

Следећи чланак у овом низу, Програмирање прилагођене ВБ.НЕТ контроле - изван основа!, приказује метод који то чини и такође објашњава како надјачати метод у прилагођеној контроли.