У ВБ6 је подпрограми догађаја, попут Буттон1_Цлицк, били много мање компликовани, јер је систем назвао потпрограм строго по имену. Ако је постојао Буттон1_Цлицк догађај, систем га је позвао. Директно је и директно.
Али у ВБ.НЕТ-у постоје две велике надоградње ВБ.НЕТ СООП наплаћује се (то је „ООП“ за Објектно оријентисано програмирање).
- Клаузула "Ручке" контролише да ли систем позива потпрограм, а не име.
- Параметри пошиљатеља и е просљеђују се у подпрограму.
Употреба параметара
Погледајмо једноставан пример да видимо разлику коју параметри праве у ВБ.НЕТ.
Приватно пот дугме1_Цлицк (
БиВал пошиљалац Ас Систем. Објект,
БиВал е као систем. ЕвентАргс
) Ручке дугмета1.Кликните
'Ваш код је овде
Енд Суб
Потпрограми догађаја увијек примају објект „пошиљалац“ и системски параметар ЕвентАргс „е“. Пошто је параметар ЕвентАргс објект, он подржава сва својства и методе неопходне. На примјер, стара подпрограм догађаја ВБ6 МоусеМове који се користи за примање четири параметра:
- Дугме као Интегер
- Схифт као Интегер
- Кс Као самац
- И Као самац
Када су напреднији мишеви изашли са више тастера, ВБ6 је имао прави проблем како да их подржи. ВБ.НЕТ пролази само један МоусеЕвентАргс параметар, али подржава пуно више својстава и метода. И сваки од њих су предмети који подржавају још више. На пример, е. Својство дугмета садржи сва ова својства:
- Лево
- Средњи
- Јел тако
- Ниједан
- КСБуттон1
- КСБуттон2
Ако неко измисли "транцендентални" миш са "виртуелним" дугметом, ВБ.НЕТ ће морати да ажурира .НЕТ Фрамеворк само да би га подржао и да се као резултат тога неће покварити претходни код.
Постоји велики број .НЕТ технологија које апсолутно зависе од ових параметара. На пример, пошто ваш рачунар обично има само један екран за приказ графике, ваш код мора да споји графику коју креира у исту слику коју користи Виндовс. Из тог разлога, један „графички“ објекат мора се делити. Главни начин на који ваш код може да користи тај графички објект је да користи е-параметар који је прослеђен ОнПаинт догађају са објектом ПаинтЕвентАргс.
Заштићени поништавања Суб ОнПаинт (
БиВал е као систем. Виндовс. Обрасци. ПаинтЕвентАргс)
Дим г као графика = е. Графика
Остали примери
Шта још можете да урадите са овим параметрима? Да илуструјемо, претпоставимо да желите да пронађете да ли низ, можда нешто што сте унели у Тектбок, постоји у било којој збирци других Тектбок-ова када кликнете на један. Можете да кодирате неколико десетина готово идентичних подпрограма за сваки Тектбок:
Иф ТектБок42.Тект. Индекс(
СеарцхСтринг. Текст) = -1
Онда НотФоунд. Текст =
"Није пронађен"
Али много је лакше кодирати само један и пустити га да обрађује све њих. Параметар пошиљатеља откриће на који је Тектбок кликнут.
Привате Суб ФиндИт (
БиВал пошиљалац Ас Систем. Објект,
БиВал е као систем. ЕвентАргс
) Рукује ТектБок1.Ентер,
ТектБок2.Ентер,
... и даље и даље.. .
ТектБок42.Ентер
Дим миТектбок Ас ТектБок
миТектбок = пошиљалац
Дим ИндекЦхар као цео број =
миТектбок. Текст. Индекс(
СеарцхСтринг. Текст)
Ако је ИндекЦхар = -1, тада _
Није пронађен. Тект = "Није пронађен" _
Елсе _
Није пронађен. Тект = "Пронађено!"
Енд Суб
Недавно ме програмер питао за бољи начин за „брисање линије која је била кликнута на било којој од шест одређених листа“. Радио је у неколико десетака редака кода што ме је једноставно збунило. Али користећи пошиљаоца, било је заиста прилично једноставно:
Приватни подлисткБок_Цлицк (
БиВал пошиљалац као предмет,
БиВал е као систем. ЕвентАргс
) Рукује ЛистБок1.Цлицк, ЛистБок2.Цлицк
Затамни миЛистБок као нови списак
миЛистБок = пошиљалац
миЛистБок. Предмети. РемовеАт (миЛистБок). СелецтедИндек)
Енд Суб
Још један пример да се скрене тачка питање је питање које је послао Пјер у Белгији. Пиерре је тестирао једнакост Буттона1 и пошиљаоца користећи Ис оператор за објекте:
Ако је пошиљалац Буттон1, онда ...
Ово је синтактички тачно јер су пошиљалац и Буттон1 објекти који се могу упутити. А пошто је пошиљалац заиста идентичан са Буттон1, зашто то не ради?
Одговор зависи од кључне речи која се налази мало раније у изјави. Прво проверимо Мицрософт документацију за Ис оператера.
Вижуал бејзик упоређује две референтне променљиве објекта са оператором Ис. Овај оператер одређује да ли се две референтне променљиве односе на исту инстанцу објекта.
Обратите пажњу да је пошиљалац послан БиВал. То значи да је пренета копија Буттон1, а не сам стварни објекат. Када Пиерре тестира да ли су пошиљалац и Буттон1 иста инстанца, резултат је Фалсе.
Да бисте провјерили да ли су Буттон1 или Буттон2 кликнути, морате претворити пошиљатеља у стварни Буттон објект и затим тестирати својство тог објекта. Текст се обично користи, али можете тестирати вредност у Таг-у или чак у својству Лоцатион.
Овај код делује:
Пригуши мој гумб као дугме
миБуттон = пошиљалац
Ако је мој гумб. Текст = "Дугме1" Затим