GotFocus () и дочерние элементы MDI

У меня есть форма MDI с 3 дочерними окнами.

  • MDI начинает пустой.

  • Каждого ребенка можно открыть один раз из меню.

Когда я открываю несколько окон и закрываю верхнее, одно из них должно получить фокус, но событие GotFocus () новой активной дочерней формы не запускается.

Private Sub frmMain_gotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus
...
End Sub

person Stijn Heylen    schedule 13.07.2010    source источник


Ответы (2)


Неудачная догадка. Либо Enter, либо событие Activated решат вашу проблему.

При программировании Windows Forms обычно следует избегать событий GotFocus и LostFocus. Они часто спрятаны в конструкторе, но не последовательно. Соответственно, события Enter и Leave являются их заменой, они генерируются из логического состояния пользовательского интерфейса, а не из исходных сообщений Windows. Имеет значение при использовании проверки и MDI.

Activated является «естественным», поскольку фактический фокус перемещается на дочерний элемент управления этой формы.

person Hans Passant    schedule 13.07.2010

Когда вы создаете дочерние формы MDI из родительского MDI, вы должны подписать родительскую форму MDI на событие GotFocus дочерней формы MDI. Когда какие-либо события фокуса происходят на вашем дочернем элементе MDI, ваш родительский элемент MDI получает уведомление.

Когда форма закрывается / открывается, следующая дочерняя форма в Z-порядке MDI должна быть выбрана автоматически, и если вы подписываетесь на событие, ваш родительский MDI-элемент может действовать соответствующим образом и отображать ваши данные.

person George Johnston    schedule 13.07.2010