Iulian Mihu Ответов: 2

Какая ссылка мне нужна, чтобы открыть форму?


фото

У меня есть ссылка "ToolStripMenu", и мне нужна ссылка из "Form2", чтобы открыть "Form1".
Я пробую тот же код, но получаю следующую ошибку: "форма, которая была указана как MdiParent для этой формы, не является MdiContainer. Имя параметра: значение".


Это код из "ToolStripMenu" для открытия "Form1".
form1 testform= new form1();
testform.WindowState = FormWindowState.Maximized;
testform.MdiParent = this;
testform.Show();


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

Какой код мне нужен для красной кнопки на картинке выше?
- Что случилось ?
Я что-нибудь пропустил?

2 Ответов

Рейтинг:
2

OriginalGriff

Вы все делаете неправильно: ваш код пытается открыть экземпляр Form1 в существующем экземпляре Form2, и это не сработает (потому что Form2 является дочерним элементом MDI) и в любом случае не то, что вы хотели (потому что вы хотите, чтобы Form1 был дочерним элементом существующего контейнера MDI, а не Form2).

Что вам на самом деле нужно сделать в вашем обработчике кнопок Form2, так это сказать родителю MDI, что он должен открыть новую Form1 (или перепрофилировать существующую, это зависит от него, а не от экземпляра Form2, который даже не должен знать, что Form1 вообще существует!)

Это звучит сложно, но на самом деле это не так - он использует тот же механизм событий, что и все элементы управления и формы: Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^] показывает, как это делается.

Хотя, честно говоря, MDI-приложений в наши дни немного и далеко, они были устаревшими для новых приложений давным-давно, еще во времена Win95 и Win 98, в пользу TDI (интерфейс документа с вкладками), который, как правило, считается гораздо более простым для понимания и использования пользователями. Вероятно, вам не следует строить новые, если у вас нет очень, очень веских причин для этого! (И даже тогда "гибкое панельное" приложение live Visual Studio, скорее всего, будет лучшим решением, чем MDI).


Iulian Mihu

Form1 существует, Form2 существует и MainForm (с ToolStripMenu) ... то, что вы хотите от меня: в форму 2, 1 кнопка, чтобы открыть форму 1.

OriginalGriff

Похоже, это то, о чем вы просите, да.

"Родитель" всегда действует как "посредник" между дочерними формами (которые не должны знать, что они вообще существуют)-поэтому вы нажимаете кнопку Form2, она запускает событие, которое обрабатывает родитель, решает, что с ним делать, и либо открывает новый экземпляр, либо активирует существующий Form1.

Iulian Mihu

Есть ли шанс сделать это с пустотой ? Теперь я пытаюсь вызвать пустоту из MainForm, чтобы открыть кнопку Form1 .... пока безуспешно.

OriginalGriff

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

Рейтинг:
2

Wendelius

Убедитесь, что форма, в которой у вас есть меню, является контейнером MDI. Видеть Как создать родительские формы MDI - Windows Forms | Microsoft Docs[^]


Iulian Mihu

правдивый.