C# вызов MDI ребенка из дочерней формы
У меня есть эти формы:
MainScreen - контейнер MDI
DataBaseOutput - дочерний
NewAnime - ребенок
DataBaseOutput имеет элемент управления вкладками, который содержит сетки данных, каждая для разных таблиц. Я использую базу данных доступа.
На этих вкладках есть меню, из которого будут вызываться функции "Создать", "Редактировать", "Удалить" и т. Д. Теперь, когда я нахожусь в меню первой вкладки и нажимаю "Новый", я хочу открыть форму "NewAnime" внутри контейнера MDI. Это, однако, не работает, как я планировал. Сначала я попытался просто вызвать его из дочерней формы (DataBaseOutput). Это привело к открытию новой формы вместо ребенка. когда я сделал это ребенком, это не обнаруживалось.
Затем я перебираю много вещей, но до сих пор не понял этого.
Это текущий код для вызова формы. Вызывает форму с методом в основной форме:
private void NewAnime_Click(object sender, EventArgs e)
{
MainScreen main = new MainScreen();
main.mShowForm(2);
this.Close();
}
Метод в основной форме:
// Forms for MDI Parent
DataBaseOutput OutputForm = new DataBaseOutput();
NewAnime AddAnime = new NewAnime();
// How i made them childs (this is at the InitializeComponent(); part)
OutputForm.MdiParent = this;
AddAnime.MdiParent = this;
public void mShowForm(int formnumber)
{
switch (formnumber)
{
case 1: OutputForm.Show(); break;
case 2: AddAnime.Show(); break;
}
}
Кто-нибудь имеет представление о том, что я делаю неправильно, и, возможно, есть лучшая идея? Это может быть слишком много работы, но, как я уже сказал, я впервые использую формы MDI, и я просто пытаюсь заставить его работать.
1 ответ
Вы установили MainForm
быть MDIContainer
? Для этого установите для свойства IsMdiContainer значение true; Также проверьте это File
а также Window
пункты меню верхнего уровня и New
а также Close
Пункты меню. (Учебник предлагает это, я знаю, что это должно иметь Window
пункт меню как минимум).
Ознакомьтесь с этим руководством для получения дополнительных указаний: Создание дочерних форм MDI (MSDN).
РЕДАКТИРОВАТЬ: Если присмотреться более внимательно, кажется, что вы создаете новый экземпляр MainForm и пытаетесь показать форму как дочерний элемент этого экземпляра, а не показывать его в существующей MainForm. Я предполагаю, что у вас уже есть экземпляр MainForm, открытый на данный момент? Предполагая, что формы OutputForm и AddAnime являются дочерними элементами MainForm, вы можете вызвать метод существующего экземпляра следующим образом:
private void NewAnime_Click(object sender, EventArgs e)
{
this.ParentForm.mShowForm(2);
this.Close();
}
но в идеале у вас должно быть событие в DataBaseOutput, которое MainForm слушает, и показывает новую форму при возникновении события. Смотрите здесь для получения дополнительной информации (речь идет о пользовательских элементах управления, а не о дочерних формах, но принцип тот же):
Вызов функций родительской формы из пользовательского элемента управления