Обращайтесь с событиями для динамического (время выполнения) - vb.net -- c# поле с участием vb.net поле с участием dynamic поле с участием runtime поле с участием controls пол Связанный проблема

Handle events for dynamic (run-time) controls - VB.NET


2
vote

проблема

русский

У меня есть элемент управления WebBrowser, который создается и добавляется в форму во время выполнения.

Как подключить этот элемент управления подпрограммой, который может обрабатывать его события во время выполнения?

Английский оригинал

I have a WebBrowser control that is created and added to the form during run-time.

How do I connect this control to subroutine that can handle its events at run-time?

</div
              

Список ответов

9
 
vote
vote
Лучший ответ
 

Используйте addhandler

e.g.

 <код> AddHandler Obj.Ev_Event, AddressOf EventHandler   

и когда вы хотите избавиться от него (и вы должны избавиться от него, когда вы закончите его, используя его)

 <код> RemoveHandler Obj.Ev_Event, AddressOf EventHandler   

В вашем случае у вас может быть что-то вроде

 <код> Dim web as New WebBrowser() AddHandler web.DocumentCompleted, AddressOf HandleDocumentCompleted   

Предполагая, что вы создали обработчик событий, называемый ручной работы.

В зависимости от ваших потребностей, вы также можете использовать osevents Ключевое слово , когда вы объявляете свой веб-браузер; Смотрите Документация .

 

Use AddHandler

e.g.

AddHandler Obj.Ev_Event, AddressOf EventHandler 

and when you want to get rid of it (and you should get rid of it when you're done using it)

RemoveHandler Obj.Ev_Event, AddressOf EventHandler 

in your case, you might have something like

Dim web as New WebBrowser() AddHandler web.DocumentCompleted, AddressOf HandleDocumentCompleted 

assuming you'd created an event handler called HandleDocumentCompleted

Depending on your needs, you could also use the WithEvents keyword when you declare your webbrowser; see the documentation.

</div
 
 
2
 
vote

Альтернативой для использования <Код> AddHandler - это декларативный синтаксис событий в VB. Чтобы использовать его, вы объявляете Control (в качестве частного элемента), используя <код> WithEvents ключевое слово. Затем Handles ключевое слово может использоваться на методах для обработки соответствующих событий:

 <код> Private WithEvents m_WebBrowser As WebBrowser  Private Sub WebBrowser_Navigate(ByVal sender As Object, ByVal e As WebBrowserNavigatedEventArgs) Handles m_WebBrowser.Navigate     MsgBox("Hi there") End Sub  Private Sub SomeActionThatCreatesTheControl()     m_WebBrowser = New WebBrowser() End Sub   

Есть преимущественно два преимущества для этого метода:

    .
  • Нет необходимости в <Код> return0 ,
  • Нет необходимости проводить все обработчики событий вручную: это делается автоматически.
 

An alternative to using AddHandler is the declarative events syntax in VB. To use it, you declare the control (as a private member), using the WithEvents keyword. Then, the Handles keyword can be used on methods to handle the appropriate events:

Private WithEvents m_WebBrowser As WebBrowser  Private Sub WebBrowser_Navigate(ByVal sender As Object, ByVal e As WebBrowserNavigatedEventArgs) Handles m_WebBrowser.Navigate     MsgBox("Hi there") End Sub  Private Sub SomeActionThatCreatesTheControl()     m_WebBrowser = New WebBrowser() End Sub 

There are mainly two advantages to this method:

  • No need for RemoveHandler,
  • No need to wire all event handlers manually: this is done automatically.
</div
 
 
1
 
vote
    .
  • Вам нужно будет использовать AddHandler и StreamHandler.
  • Если вы вручную добавляете событие через AddHandler, не забудьте удалить его (в соответствующем месте), используя RemoveHandler.
  • Набрав "addhandler nameofcontrol". даст список доступных событий через IntelliSense.
  • Intellisense, Документация, (или список ошибок »), также даст вам« подпись »обработчика событий.
 <код> return1  
 
  • You will need to use AddHandler and RemoveHandler.
  • If you manually add an event through AddHandler be sure to remove it (in an appropriate location) using RemoveHandler.
  • Typing "AddHandler NameOfControl." will give a list of available events via intellisense.
  • Intellisense, documentation, (or the "error list"), will also give you the "signature" of the event handler.
 Private Sub WebBrowser1_Navigate(ByVal sender As Object, ByVal e As WebBrowserNavigatedEventArgs)  End Sub  Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing     RemoveHandler WebBrowser1.Navigated, AddressOf WebBrowser1_Navigate End Sub  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     AddHandler WebBrowser1.Navigated, AddressOf WebBrowser1_Navigate         End Sub 
</div
 
 
0
 
vote

Я узнал об этом, исследуя сгенерированный дизайнерский код формы. Скопируйте один из таких примеров, и если вы осмотрите, вы можете узнать другие ценные вещи о настройке элементов управления во время выполнения.

в C # его сделано с помощью + =, на элементе события класса с функцией в качестве параметра, но у меня нет VB.NET Handy, чтобы проверить себя ... Извините.

Редактировать: это AddHandler , как хорошо описано Daniel L в Его ответ, а в полной мере подробно в msdn .

 

I learned about this from examining the Form Designer generated code. Copy one of the examples from there, and if you look around you might learn some other valuable things about setting up controls at run-time.

In C# its done with +=, on an event member of a class with a function as the parameter, but I do not have VB.net handy to check myself... sorry.

EDIT: It's AddHandler as described well by Daniel L in his answer, and in full detail at msdn.

</div
 
 
0
 
vote

Пример

addhandler sharedtimer.tick, адрес sharedtimer_tick

 

Example

AddHandler SharedTimer.Tick, AddressOf SharedTimer_Tick

</div
 
 
0
 
vote

'У меня есть метод, который обнаруживает элементы управления и добавляет обработчики в определенных ситуациях.
«Вот упрощенный пример.
«Можно ли пройти в обработчике во время выполнения?

 <код> Private Sub Example(byval ph as Placeholder)   for each ctrl as control in ph.controls     if typeof (ctrl) is textbox then       dim cb as checkbox = ctrl       AddHandler cb.DataBinding, AddressOf MyHandler     end if   next end sub   

'Я хочу сделать что-то более похоже на это ...

 <код> Private Sub Example(byval ph as Placeholder, **byref method as delagate**)   for each ctrl as control in ph.controls     if typeof (ctrl) is textbox then       dim cb as checkbox = ctrl       AddHandler cb.DataBinding, **method**     end if   next end sub   

Проблема, которую я имею в том, чтобы вызвать метод. Это не работает:

 <код> Example(myPlaceholder, addressof MyRuntimeHandler)   
 

'I have a method that discovers controls and adds handlers in certain situations.
'Here is a simplified example.
'Is it possible to pass in the handler at run time?

Private Sub Example(byval ph as Placeholder)   for each ctrl as control in ph.controls     if typeof (ctrl) is textbox then       dim cb as checkbox = ctrl       AddHandler cb.DataBinding, AddressOf MyHandler     end if   next end sub 

'I'm looking to do something more like this...

Private Sub Example(byval ph as Placeholder, **byref method as delagate**)   for each ctrl as control in ph.controls     if typeof (ctrl) is textbox then       dim cb as checkbox = ctrl       AddHandler cb.DataBinding, **method**     end if   next end sub 

The problem I'm having is in calling the method. This does not work:

Example(myPlaceholder, addressof MyRuntimeHandler) 
</div
 
 
0
 
vote

Вы можете использовать заявление AddHandler для выполнения этих вещей. Вы можете добавить любые обработчики событий во время выполнения в WebBrowser, как это

 AddHandler WebBrowser1.xevent, адрес WebBrowser1Eventher1EventHandler 

И аналогично вы можете использовать RemoveHandler, который отключает событие с обработчика события, как это:

 RemoveHandler WebBrowser1.xevent, адрес WebBrowser1EventHandler 
 

You can use the Addhandler statement for doing these things. You can add any event handlers at run time to the webbrowser like this

AddHandler WebBrowser1.xEvent, AddressOf WebBrowser1EventHandler

and similarly you can use RemoveHandler, which disconnects an event from an event handler like this:

RemoveHandler WebBrowser1.XEvent, AddressOf WebBrowser1EventHandler
</div
 
 

Связанный проблема

1  Xero C # «Текущий токенопозиторий не имеет токена текущего запроса»  ( Xero c sharp the current tokenrepository doesnt have a current request token ) 
удалось подключиться к Xero API и получить токен запроса. Однако после перезапуска проекта (для отладки) он в основном дает следующую ошибку при проложении то...

12  Сырые запросы SQL и основной базы  ( Raw sql queries and entity framework core ) 
Я переносим свое приложение в Core Ass.net MVC Core и Framework Framework, и я нашел проблему. У меня есть RAW SQL-запрос к сущности, как это <код> var rawS...

1  WIX Набор инструментов Build не удается после обновления от .NET 4.0 до 4.6.1: не может загрузить MSBuild Wrapper?  ( Wix toolset build fails after upgrading from net 4 0 to 4 6 1 cannot load msbu ) 
Так после обновления всего проекта до 4.6.1 Я получаю эту ошибку, выброшенную нагревом, когда я его создаю: <код> Failed to load MSBuild wrapper object: Cou...

0  Linq 2 SQL Использование содержит [дубликат]  ( Linq 2 sql using contains ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

2  SMTPClient отправляет RAW HTML  ( Smtpclient sending raw html ) 
Может ли кто-нибудь сказать мне, почему следующий код отправляет электронные письма в Raw HTML? Как в, электронная почта выглядит когда вы просматриваете исто...

0  HAL, чтобы десерифицировать ответ JSON, если количество полей от ответа не известно?  ( Haw to deserialize json response if the number of fields from the response not k ) 
С тех пор, как я не сейчас, сколько полей ответа JSON не смогу ли у вас сложный код, чтобы соответствовать объекту JSON. Что такое лучшая практика для десериа...

0  C # сделать в то время как Unassigned локальной проблемы переменной  ( C sharp do while unassigned local variable problem ) 
<Р> Я после C # курса и пытаюсь обновить мой метод ввода пользователя, чтобы проверить, если введенная входную консоль целое. Я написал сам в то время как сдел...

1  ASP.NET Печать PDF непосредственно к принтеру с настройками  ( Asp net print pdf directly to printer with preferences ) 
Я работаю над проектом, который требует от нас отправлять PDFS на печатную прессу. Ранее мы сделали это с помощью настольного приложения и Acrobat, но я хотел...

4  Какую книгу на TDD для C # с лечением издевателей  ( What book on tdd for c sharp with treatment of mocks ) 
Можете ли вы помнить книгу о тестировании подразделения и TDD для C #, по крайней мере, некоторое лечение отдельных объектов? Я видел эту Вопрос Но, похож...

8  Требуется 407 аутентификация - не отправлено проблем  ( 407 authentication required no challenge sent ) 
<Сильное> Обновление: Если вы только что прибыли на этот вопрос, генеральный сигнал заключается в том, что я пытаюсь сделать httpwebrequest через прокси, и ...

4  Как написать на пользовательский журнал событий?  ( How to write to a custom event log ) 
Я пытаюсь получить мою службу .NET Windows вправо на пользовательский журнал событий. Я использую <код> EventLogInstaller , чтобы создать журнал событий и ист...

1  Как я могу нарисовать кружком на моем приложении Bing Map вокруг центральной точки с радиусом, приведенным в милях  ( How do i draw a circle on my bing map application around a centerpoint with a ra ) 
Я смог нарисовать эллипс на моей карте, используя значения широты и долготы вокруг данной центральной точки. Хотя я вижу форму на карте, я получаю эллипс вмес...

0  TreeView Checkbox Checked File и B папок Загрузка в ListView в C #  ( Treeview checkbox checked file and folder load in listview in c sharp ) 
Я хочу сделать аудиторский инструмент, который направлен на копирование файлов и папок. Я использую TreeView для загрузки файлов и папок с использованием ме...

0  Должен ли я использовать ExecuteNonQuery для этой команды резервного копирования БД  ( Should i use executenonquery for this db backup command ) 
<Р> У меня есть метод, который позволяет мне пнуть резервную копию базы данных. То, что я интересно, если я должен использовать ExecuteNonQuery () в этом конте...

1  Служба окна в C # (ServiceProcessInsaller) - Ошибка 5: Доступ запрещен  ( Window service in c sharp serviceprocessinsaller error 5 access is denied ) 
Я использую Visual Studio 2008 и .NETFramework 3.5. Я разработал одно приложение Windows Service в C # с помощью файловой системы. Основная цель этого проекта...

Связанный проблема

1  Xero C # «Текущий токенопозиторий не имеет токена текущего запроса» 
12  Сырые запросы SQL и основной базы 
1  WIX Набор инструментов Build не удается после обновления от .NET 4.0 до 4.6.1: не может загрузить MSBuild Wrapper? 
0  Linq 2 SQL Использование содержит [дубликат] 
2  SMTPClient отправляет RAW HTML 
0  HAL, чтобы десерифицировать ответ JSON, если количество полей от ответа не известно? 
0  C # сделать в то время как Unassigned локальной проблемы переменной 
1  ASP.NET Печать PDF непосредственно к принтеру с настройками 
4  Какую книгу на TDD для C # с лечением издевателей 
8  Требуется 407 аутентификация - не отправлено проблем 
4  Как написать на пользовательский журнал событий? 
1  Как я могу нарисовать кружком на моем приложении Bing Map вокруг центральной точки с радиусом, приведенным в милях 
0  TreeView Checkbox Checked File и B папок Загрузка в ListView в C # 
0  Должен ли я использовать ExecuteNonQuery для этой команды резервного копирования БД 
1  Служба окна в C # (ServiceProcessInsaller) - Ошибка 5: Доступ запрещен