2014-02-07 3 views
2

У меня есть две формы: mdfi и form1. Я хочу сделать mdfi формой MdiContainer кодом от form1. Я пробовал следующее, но программы закрываются при запуске:Форма MdiContainer не открывается

+1

Почему вы пытаетесь добавить форму во время мероприятия Деактивировать (!) – User999999

+0

Я делаю просмотрщик изображений похожим на Google picasa, поэтому, когда пользователь нажимает где-либо на экране, он создает форму mdi и изображение, соответствующее этому. –

+0

Форма MDI находится внутри родительской формы. Я не уверен, что это то, чего ты хочешь. Вы нажимаете кнопку [X], чтобы закрыть 'form1', когда этот код вызывается? –

ответ

2

Изменение главного окна вашего приложения в дочернем окне имеет много побочных эффектов. Winforms вынужден уничтожить окно из-за назначения MdiParent. Этого достаточно, чтобы завершить вызов Application.Run() в методе Main(), и это конец вашего приложения. Вы должны изменить это:

[STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     var main = new Form1(); 
     main.Show(); 
     Application.Run(); 
    } 

И вы должны убедиться, что вы в настоящее время заканчиваются, когда родитель MDI закрыт:

private void Form1_Deactivate(object sender, EventArgs e) { 
     this.TopMost = false; 
     var newMdiParent = new mdfi(); 
     newMdiParent.IsMdiContainer = true; 
     this.MdiParent = newMdiParent; 
     newMdiParent.FormClosed += (s, ea) => Application.Exit(); 
     newMdiParent.Show(); 
     this.Deactivate -= Form1_Deactivate; 
    } 

    private void Form1_FormClosed(object sender, FormClosedEventArgs e) { 
     if (this.MdiParent == null) Application.Exit(); 
    } 
Смежные вопросы