Member 10622063 Ответов: 1

Форма Mdichild не получает фокуса


У меня есть форма MDI, которая содержит дерево (закрепленное слева), которое действует как меню для открытия форм MDIChild. Когда я нажимаю на узел дерева (в NodeMouseClick событие), открывается новая форма MDIChild. Проблема в том, что он не получает фокуса. Фокус всегда остается на дереве. Форма MDIChild не имеет заголовка и развернута в родительской форме MDI.

Что я уже пробовал:

Я пробовал использовать .Фокус, активация, BringToFront на форме MDIChild без всякой удачи.

Есть ли решение этой проблемы? Использование .NET 4.0.3.

Gerry Schmitz

Дочерний порядок может быть не таким, как вы думаете.

https://social.msdn.microsoft.com/Forums/vstudio/en-US/7294a7d8-c85c-44d8-b491-bc13c2500182/focus-mdi-child?форум=csharpgeneral

Member 10622063

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

Gerry Schmitz

Каков ваш обработчик "щелчка"? Лицевой ладонью обычно является то, что e.Handled не установлен в true, вызывая поведение "по умолчанию", которое вы видите.

Member 10622063

NodeMouseClick. Никакой е.обрабатывается там...

Richard MacCutchan

Было бы полезно, если бы вы показали код, который устанавливает фокус.

Member 10622063

Private Sub Actions_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) обрабатывает действия.NodeMouseClick
SourceForm.MdiParent = Mdiform; Описание
SourceForm.Показать()
SourceForm.BringToFront() 'не имеет никакого эффекта
Исходная форма.Activate() 'не имеет никакого эффекта
Конец Подводной Лодки

Dave Kreskowiak

Моей первой мыслью было попытаться установить фокус на элементе управления на форме, а не на самой форме.

Member 10622063

Я просто попробовал. Не повезло.

Похоже, что когда событие NodeMouseClick завершено, фокус возвращается к дереву nomatter, что вы делаете...

Правка: похоже, что контроль над дочерней формой, на которой я фокусируюсь, действительно получает фокус внутри формы, но сама форма все еще не имеет фокуса.

Member 10622063

Хотя я помню, что уже пробовал, я попробовал еще раз, просто чтобы быть уверенным. Но ничего не изменилось...

После.Показав форму, я добавил Вот это:
Me.ActivateMdiChild(SourceForm)

Я также попытался выполнить вышеуказанные действия из меню, и это сработало отлично. Пока я фокусировался на кнопке на форме, форма имела фокус и нажатие "пробел" я видел, как нажимается кнопка.

Может быть, ошибка TreeView?

Richard MacCutchan

Я не использовал MDI в C#, но я помню, что использовал его в MFC, и перемещение фокуса работало нормально. К сожалению, это очень далеко от .NET.

1 Ответов

Рейтинг:
10

Member 10622063

Ух ты! После долгих поисков за последние пару дней я наткнулся на это: Элемент управления "дерево" фокус разочарования | обзор ПК [^]

Предложение в финальном посте сработало!

Спасибо всем за помощь.