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 слушает, и показывает новую форму при возникновении события. Смотрите здесь для получения дополнительной информации (речь идет о пользовательских элементах управления, а не о дочерних формах, но принцип тот же):

Вызов функций родительской формы из пользовательского элемента управления

Другие вопросы по тегам