• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Открытие формы по событию

  • Автор темы Dikobraz Grey
  • Дата начала
D

Dikobraz Grey

Всем доброго времени суток.

Возникла интересная ситуация: есть две формы. Обе имеют обработчиков событий, происходящих с Word'ом. Первая форма все время открыта и "слушает" Word. По факту открытия документа в Word'e открывается вторая форма.

[codebox] Private Sub oWord_ApplicationEvents3_Event_DocumentOpen(ByVal Doc As Word._Document) _
Handles oWord.ApplicationEvents2_Event_DocumentOpen
Dim frm As New Form()
frm.Show()
End Sub[/codebox]

Форма конечно открывается, но к сожалению ее контекст не прогружается - внутри белый фон. При этом если открывать ее по нажатию кнопки, то тот же код:

[codebox] Dim frm As New Form()
frm.Show()[/codebox]
прекрасно работает.

Может кто знает, как обойти эту особенность или глюк? Может, это конечно и RTFM, но google ничего не дал, а в VB.Net я новичек. Всем заранее спасибо.
 
E

etc

Кинте тут небольшую сборочку, с таким эфектом.
 
D

Dikobraz Grey

etc, прикрепил проект. Лишние бантики закомментил, хотя там почти и нет ничего. Писал в VB.Net 2008.
 

Вложения

  • ________TaskBar.zip
    206,2 КБ · Просмотры: 153
E

etc

тока сення заметил o_O ....
Дело в том что вы создаете окно не в потоке своего приложения, а в потоке ворда (вроде(!)).
Исправить просто, надо "дернуть" ваш главный поток и чтобы он создал окно сам.

примерно так:

Код:
	Delegate Sub OpenHandler()

Private Sub oWord_ApplicationEvents3_Event_DocumentOpen(ByVal Doc As Word._Document) _
Handles oWord.ApplicationEvents2_Event_DocumentOpen
'перехват события открытия документа в Word'e.
Me.BeginInvoke(New OpenHandler(AddressOf OpenWindow))
End Sub

Private Sub OpenWindow()
If (Me.InvokeRequired) Then
Me.BeginInvoke(New OpenHandler(AddressOf OpenWindow))
Else
Dim frm As New Form()
frm.Show()
End If
End Sub

эта, я в бейсике не силен, поэтому могет быть не по правилам, но суть думаю должна быть понятна.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!