C # вызов MDI ребенка из дочерней формы - PullRequest
3 голосов
/ 29 марта 2011

У меня есть эти формы:

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 Ответ

1 голос
/ 29 марта 2011

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

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

...