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

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

Dikobraz Grey

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

Возникла интересная ситуация: есть две формы. Обе имеют обработчиков событий, происходящих с 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
#2
Кинте тут небольшую сборочку, с таким эфектом.
 
D

Dikobraz Grey

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

Вложения

E
#4
тока сення заметил 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
эта, я в бейсике не силен, поэтому могет быть не по правилам, но суть думаю должна быть понятна.