Открытие Mdi Parent как объекта не позволит открыть дочернюю форму Mdi из другой дочерней формы Mdi в VB.Net

У меня странная проблема с родительской формой MDI.
Я открываю такие формы, как - ›Форма входа (не является MdiContainer) -› MdiParent (является MdiContainer).
Но я хотел передать логическое значение из формы входа в форму MdiParent, чтобы я объявил переменную друга в форме MdiParent и вызвал объект MdiParent в форме входа, как показано в приведенном ниже коде.

Dim frm As New MdiParent
'frm.NormalMode = True
frm.Show()

Все нормально работает. Форма MDIParent открылась должным образом.
Но у меня есть дочерняя форма в форме MdiParent.
У дочерней формы есть кнопка, которая открывает другую дочернюю форму с родительским MDIParent, показанным ниже.

Dim frm1 As New Child2
frm1.MdiParent = MdiParent
frm1.anyvariable = value
frm1.Show()

Но теперь не открывается. Как и при нажатии кнопки, точка останова проходит через frm1.show() командную строку, но не открывается.

Раньше я открывал MDIParent прямо как MdiParent.show(), и все работало нормально.
Все дочерние формы правильно открываются с этим кодом.

Что-то лишнее:
Кроме того, когда я запускаю с MdiParent.Show() и приостанавливаю код в VS2017, раскомментирую код MDIParent с помощью Object (тот, который указан выше) и комментарий MdiParent.Show() Он работает нормально. Опять же, остановка и повторное воспроизведение кода создает проблемы.
Кроме того, я еще не использовал эту логическую переменную в MdiParent Form, так что я думаю, это не проблема.
На данный момент использование общедоступной переменной - удобный способ, Наверное.
Кроме того, объявление переменных Friend между двумя дочерними формами вообще не проблема.


person bonny    schedule 08.12.2020    source источник


Ответы (1)


Я думаю, что происходит в этой строке:

frm1.MdiParent = MdiParent

часть справа интерпретируется как экземпляр класса MdiParent по умолчанию, а не как свойство MdiParent текущей формы. В результате новая форма порождается тем экземпляром по умолчанию, который вы не отображали, а не экземпляром, который вы явно создали и отображали. Это также объясняет, почему это работает, когда вы используете это:

MdiParent.Show()

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

frm1.MdiParent = Me.MdiParent

В качестве альтернативы используйте для формы более подходящее имя, чем MdiParent, например MainForm или подобное. Тогда не будет конфликта имен.

person jmcilhinney    schedule 08.12.2020
comment
Это просто опечатка. Но проблема не в этом. Это именно то, что я показал, что написал в дочерней форме, чтобы открыть другую дочернюю форму. И я изменил вопрос. - person bonny; 08.12.2020
comment
Это не ответ @jmcilhinney - person bonny; 08.12.2020
comment
@bonny, я отредактировал свой ответ, но, пожалуйста, скопируйте и вставьте ваш код в будущем, чтобы мы не тратили время зря. - person jmcilhinney; 08.12.2020
comment
Приношу извинения за это, но я думаю, что если я поставлю реальный код, это может показаться непонятным, и мне придется объяснять им больше ... Я добавлю реальный код в следующий раз. - person bonny; 08.12.2020
comment
Еще раз извиняюсь, я на самом деле использовал другое имя в своем проекте. BonnyMdi, но опять же по той же причине, что и в предыдущем комментарии. - person bonny; 08.12.2020