Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Открытие формы по событию Добавлено: 29.09.09 11:35  

Автор вопроса:  Dikobraz Grey
Всем доброго времени суток.

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

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

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

Dim frm As New Form()
frm.Show()

прекрасно работает.

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

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #1 Добавлено: 29.09.09 17:34
Гм! насколько я понял, ты УЖЕ создал 2-ю форму, с какимто содержанием, а своим кодом

Dim frm As New Form()
frm.Show()

ты создаёш новую форму, как переменную, и открываеш, не свою вторую форму, а её.Чтобы твоя фторая форма открылась надо написать Form2.Show, притом Form2 - это имя второй формы, по умолчанию, у тебя может стоять другое.

Ответить

Номер ответа: 2
Автор ответа:
 Dikobraz Grey



Вопросов: 1
Ответов: 4
 Профиль | | #2 Добавлено: 30.09.09 10:58
создаю новую. с именем Form (первая - main). И show пишу. Фишка в том, что один и тот же код написанный в кнопке первой формы и в обработчике события открытия документа в Word'e на первой форме действует по разному: кнопка открывает вторую форму, а обработчик не может прогрузить ее контекст - форма открывается, но вместо ее контролов и стандартного серого фона - белая заливка(

Ответить

Номер ответа: 3
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #3
Добавлено: 30.09.09 11:43
обработчик не может прогрузить ее контекст

какой контекст? Ты ж новую форму создал. Пустую.
Или ты в рантайме контролов туда нашпиговал?
Да и с фоном непонятно...

Ответить

Номер ответа: 4
Автор ответа:
 Dikobraz Grey



Вопросов: 1
Ответов: 4
 Профиль | | #4 Добавлено: 30.09.09 14:10
Для ясности решил выложить скриншот:
http://slil.ru/28029832
Сверху - форма открытая по событию
  1. Private Sub oWord_ApplicationEvents3_Event_DocumentOpen(ByVal Doc As Word._Document) _
  2. Handles oWord.ApplicationEvents2_Event_DocumentOpen
  3. Dim frm As New Form()
  4. frm.Show()
  5. End Sub

 снизу - она же, открытая по кнопке из первой формы.

Ответить

Номер ответа: 5
Автор ответа:
 Илья



Вопросов: 1
Ответов: 48
 Профиль | | #5 Добавлено: 30.09.09 16:48
Скорее всего форма не сделала paint, а ты пробовал её обновлять? (Refresh)? или перемести её за границу экрана и верни, так ты вызовешь процедуру Paint

Ответить

Номер ответа: 6
Автор ответа:
 Dikobraz Grey



Вопросов: 1
Ответов: 4
 Профиль | | #6 Добавлено: 01.10.09 12:28
Спасибо, Илья, но Refresh не помог. Мне кажется она не то что не обновляется, а не догружается. К тому же если навести курсор на эту "неотрисованную" форму курсор превращается в "часики". Значит что-то грузит. Но грузит абсолютно неприемлемое время. Подвисла? Но из кнопки открытие нормальное, что может вызвать зависание при открытии по обработчику события (не Button_click:)?

Ответить

Номер ответа: 7
Автор ответа:
 Dikobraz Grey



Вопросов: 1
Ответов: 4
 Профиль | | #7 Добавлено: 01.10.09 12:54
Проблема решена. форма пыталась открыться из потока Word. Правильный код:

  1.     Delegate Sub OpenHandler()
  2.  
  3.     Private Sub oWord_ApplicationEvents3_Event_DocumentOpen(ByVal Doc As Word._Document) _
  4.    Handles oWord.ApplicationEvents2_Event_DocumentOpen
  5.         'перехват события открытия документа в Word'e.
  6.         Me.BeginInvoke(New OpenHandler(AddressOf OpenWindow))
  7.     End Sub
  8.  
  9.     Private Sub OpenWindow()
  10.         If (Me.InvokeRequired) Then
  11.             Me.BeginInvoke(New OpenHandler(AddressOf OpenWindow))
  12.         Else
  13.             Dim frm As New Form(Me.oWord)
  14.             frm.Show()
  15.             frm.TopMost = True
  16.         End If
  17.     End Sub


Всем спасибо)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам