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, и я просто пытаюсь заставить их работать.


person Deep Frozen    schedule 29.03.2011    source источник


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

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

person Iain Ward    schedule 29.03.2011
comment
Да, это MDIContainer, и все это есть. Идея состоит в том, чтобы открыть новый дочерний элемент (AddAnime) и заполнить его, а затем снова закрыть, но я хочу, чтобы он находился внутри MDIContainer. В любом случае, мне нужно вызвать нового ребенка от ребенка, и я не могу заставить это происходить должным образом. Я могу вызвать ребенка из основной формы, это работает, но я не могу вызвать ребенка из другого ребенка. - person Deep Frozen; 29.03.2011
comment
@ ваше редактирование: Хорошо, спасибо, но где мне показать форму DataBaseOutput, что MainForm является родительской формой? потому что я не могу запустить его прямо сейчас. - person Deep Frozen; 29.03.2011