Събития (Visual Basic), Microsoft Docs
Докато можете да мислите за проект на Visual Studio като набор от процедури, които се изпълняват последователно, реалността е, че повечето програми са управлявани от събития, което означава, че потокът на изпълнение се определя от външни влияния, наречени събития.
Събитието в този случай е сигнал, който казва на приложението, че се е случило нещо важно. Например, когато потребителят щракне върху контрола във формуляр, формулярът може да предизвика събитие Click и да извика процедура, която обработва събитието. Събитията също позволяват отделни задачи да си взаимодействат. Например, потребителско приложение изпълнява задача за сортиране отделно от основното приложение.
Термини и основни понятия за събития
Този раздел описва термините и концепциите, свързани с използването на събития във Visual Basic.
Анонс на събитието
Събитията в класове, структури, модули и интерфейси се декларират с помощта на ключовата дума Event, както е показано в следния пример.
Създаване на събития
Събитията трябва да бъдат генерирани в рамките на класа, модула или структурата, където са декларирани. Например, производен клас не може да генерира събития, наследени от базов клас.
Изпращачи на събития
Всеки обект, способен да генерира събития, е подател на събития, наричан още излъчвател на събития Формуляри, контроли и потребителски обекти са примери за податели на събития.
Обработчици на събития
Обработчиците на събития са процедури, които се извикват, когато настъпи съответното събитие. Можете да използвате всякакви валидни подпрограми с подходящия подпис вкато манипулатор на събитие Въпреки това, функция не може да се използва като манипулатор на събитие, защото не може да върне стойност към източника на събитие.
Visual Basic използва стандартната конвенция за именуване на манипулатори на събития. Името трябва да се състои от името на подателя на събитието, долна черта и името на събитието.Например събитието Click на бутон с име button1 ще бъде наречено Sub button1_Click.
Препоръчително е да следвате конвенцията за именуване, когато дефинирате манипулатори на събития за персонализирани събития, но това не е задължително, може да се използва всяко валидно име на подпрограма.
Свързване на събития към техните манипулатори
За да може даден манипулатор на събитие да бъде готов за използване, той трябва да бъде свързан със събитие чрез оператора Handles или AddHandler.
Изявление и клауза WithEvents
Изявлението WithEvents и условието Handles предоставят декларативен начин за указване на манипулатори на събития Събитие, предизвикано от обект, който е деклариран с ключовата дума WithEvents, може да бъде обработено от всяка процедура с оператор Handles за това събитие, както е показано в следния пример:
Използването на израза WithEvents и клаузата Handles често е най-добрият избор за манипулатори на събития, тъй като декларативният синтаксис, който използват, прави обработката на събитието по-лесна за кодиране, четене и отстраняване на грешки. Има обаче някои ограничения, които трябва да имате предвид, когато използвате променливи WithEvents:
Тъй като общите събития не са свързани с екземпляри на клас, не можете да използвате WithEvents за декларативно обработване на общи събития. Не можете също да използвате WithEvents или Handles за обработка на събитияИ в двата случая можете да използвате командата AddHandler, за да управлявате тези събития.
Не могат да се създават масиви от променливи WithEvents.
Променливите WithEvents позволяват на един манипулатор на събития да обработва един или повече видове събития или на множество манипулатори на събития да обработват един вид събитие.
Въпреки че условието Handles е стандартният начин за обвързване на събитие към манипулатор, то може да бъде обвързано само по време на компилиране.
В някои случаи, като например когато събитията са свързани с формуляри или контроли, Visual Basic автоматично извиква празен манипулатор на събитие и го свързва със събитието.Например, когато щракнете двукратно върху команден бутон във формуляр в режим на проектиране, Visual Basic създава празен манипулатор на събития и променлива WithEvents за командния бутон, както в следния код:
Оператори AddHandler и RemoveHandler
Изявлението AddHandler е подобно на условието Handles, тъй като и двете ви позволяват да посочите манипулатор на събитие. Въпреки това, AddHandler, използван с RemoveHandler, осигурява повече гъвкавост от условието Handles и ви позволява динамично да добавяте, премахвате и променяте манипулатора на събитие, свързан със събитието. Ако трябва да обработвате общи събития или събития от структура, трябва да използвате AddHandler.
AddHandler приема два аргумента: името на събитието от подателя на събитието, като например контрола, и израз, който указва делегата. Не е необходимо изрично да дефинирате класа на делегат, когато използвате AddHandler, тъй като операторът AddressOf винаги връща препратка към делегата. Следващият пример свързва манипулатор на събитие със събитие, предизвикано от обект.
RemoveHandler, отделя събитие от манипулатор на събития, използвайки същотосинтаксис като AddHandler Примери.
Следващият пример свързва манипулатор на събитие със събитие, събитието се случва. Манипулаторът на събитието улавя събитието и показва съобщение.
След това първият манипулатор на събитие се премахва и друг манипулатор на събитие се свързва със събитието.Когато събитието се случи втори път, се показва различно съобщение.
Накрая вторият манипулатор на събитие се премахва и събитието се задейства за трети път. Тъй като вече няма манипулатор на събитие, свързан със събитието, нищо не се случва.
Обработка на събития, наследени от базов клас
Производните класове са класове, които наследяват характеристики от базов клас и могат да обработват събития, повдигнати от техния базов клас с помощта на оператора HandlesMyBase.
Обработка на събития от базов клас
Свързани теми
Описва как да създадете процедура за обработка на събития.
Показва как да дефинирате персонализирано събитие, което позволява неговите манипулатори на събития да бъдат извиквани асинхронно.
Показва как да дефинирате персонализирано събитие, което използва памет само когато събитието се обработва.
Списък с често срещани въпроси, свързани с манипулатори на събития в наследени компоненти.
Предоставя обща информация за модела на събитията в .NET Framework.
Описва как да работите със събития, свързани с обекти на Windows Forms.
Предоставя обща информация за делегатите във Visual Basic.