2010-05-01 3 views
15

Я хочу закрыть текущую форму, на которой я нахожусь (MainForm), а затем открыть вторую (форму).Закрытие формы, а затем вызов другой

Я пробовал:

private void buttonStartQuiz_Click(object sender, EventArgs e) 
{ 
    this.Close(); 

    Form2 form2 = new Form2(); 
    form2.ShowDialog(); 
} 

Или добавив this.Close(); после form2.ShowDialog() также не работает.

Любые подсказки?

РЕДАКТИРОВАТЬ: Кроме того, добавьте, что добавив this.Close() после form2.ShowDialog(), он закрывается, только когда я закрываю новую форму. Если я выберу form2.Show(), он сразу же закрывает обе формы.

ответ

32

Изменить

this.Close(); 

To:

this.Hide(); 

Потому что вы не можете закрыть главное окно программы и хотите приложение запускается после него. Вы должны скрыть основную форму или изменить главное окно на окно, которое все еще было открыто.

В этом случае вы должны закрыть главное окно после окончания ShowDialog(). Затем необходимо добавить в конце этой функции события кнопки this.Close()

Ваш код новый код:

private void buttonStartQuiz_Click(object sender, EventArgs e) 
    { 
     // hide main form 
     this.Hide(); 

     // show other form 
     Form2 form2 = new Form2(); 
     form2.ShowDialog(); 

     // close application 
     this.Close(); 
    } 
+0

Но я хочу, чтобы закрыть его. Хотя я думаю, что я мог бы скрыть это, а затем, выходя из формы 2, я мог бы перезвонить? – elvispt

+0

@elvispt: Да, вы можете это сделать. Измените this.Close(); к этому. Шоу(); – Svisstack

+0

Что было бы правильным способом вызвать скрытый (основной) из формы2? – elvispt

-1

Вы закрываете форму первых, вы должны загрузить 2-ю форму первой.

private void buttonStartQuiz_Click(object sender, EventArgs e) 
{ 
Form2 form2 = new Form2(); 
form2.ShowDialog(); 
this.Close(); 
} 
+0

Вы протестировали его? – 2015-08-26 15:22:47

6

Вы можете связываться с ApplicationContext но рамки .NET уже имеет очень хорошую поддержку для этого оконного режима с классом WindowsFormsApplicationBase. Свойство ShutdownStyle доступно, чтобы программа была отключена только после закрытия последнего окна. Сделайте код в Program.cs выглядеть следующим образом:

using System; 
using System.Windows.Forms; 
using Microsoft.VisualBasic.ApplicationServices; // Add reference to Microsoft.VisualBasic!! 

namespace WindowsFormsApplication1 { 
    class Program : WindowsFormsApplicationBase { 
    [STAThread] 
    static void Main(string[] args) { 
     var app = new Program(); 
     app.EnableVisualStyles = true; 
     app.ShutdownStyle = ShutdownMode.AfterAllFormsClose; 
     app.MainForm = new Form1(); 
     app.Run(args); 
    } 
    } 
} 
0
Form2 frm2 = new Form2(); 
frm2.ShowDialog(); 

и

this.Close(); 

не хорошая комбинация ..

frm2 будет на самом деле загружаться, но вы не можете даже см. его, потому что this.Close(); будет закрывать каждую форму всего за миллисекунду ...

this.Hide(); 

works ...

0

Просто включите или отключите форму, а не пытайтесь закрыть.

код это нравится:

this.enabled = false; 

в случае щелчка или туда, куда вы хотите.

Надеюсь, это поможет.

-1

Попробуйте это:

btCancel.FindForm().Close(); 

btcancel кнопка, которая лежит на форме вы хотите закрыть.

-1
this.Visible = false; 
Form2 form2 = new Form2(); 
form2 .ShowDialog(); 
this.Close(); 
+1

Это не дает ответа на вопрос. Чтобы критически или просить разъяснений у автора, оставьте комментарий ниже своего сообщения - вы можете всегда комментируйте свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (http://stackoverflow.com/ помощь/привилегии/комментарий). – dbugger

+0

, но это ответ на его вопрос , пожалуйста, попробуйте, прежде чем говорить, что он не работает его вопрос был я хочу закрыть e текущая форма Я нахожусь (MainForm), а затем открываю вторую (форму). и это ответ для него –

+0

В основном, вам просто нужно сказать, что делает ваш код, а не просто выставлять строки кода. – Cullub

-2

Поместите это в основной форме

private void mainform_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      Application.Exit(); 
     } 

работал для меня.

0

Просто замените это.Close(); с этим. Скрыть(); Он будет работать отлично!

1

Это прекрасно работает для меня ...

private void button_Name_Click(object sender, EventArgs e) 
    { 
     form_2 Form2 = new Form2(); 
     Form2.ShowDialog(); 
     this.Close(); 
    } 
+0

Хотя это может ответить на вопрос, лучше объяснить основные части ответа и, возможно, проблему с кодом OP. – pirho

Смежные вопросы