Закрытие предыдущего поля формы в C ++ .net - PullRequest
0 голосов
/ 10 ноября 2011

Я использую Visual C ++ 2005, и я создаю приложение, которое имеет различные формы.Я хочу, чтобы при открытии новой формы предыдущая закрывалась.Я уверен, что мне нужно добавить только одну строку кода, но, будучи новичком в этом, я понятия не имею, что это такое.Форма, которую я хочу закрыть, это Form1.h.Любая помощь будет высоко ценится.

Вот мой текущий код:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 Parts ^parts = gcnew Parts();
                 parts->ShowDialog();
                 this->Close();

Ответы [ 3 ]

1 голос
/ 12 апреля 2013

Чтобы отобразить вторую форму (Детали), вы должны использовать Показать вместо ShowDialog . ShowDialog блокирует выполнение, и метод Close не будет вызываться, пока форма Part не будет закрыта.

Parts ^parts = gcnew Parts();
parts->Show(); // Show the form and continue execution
this->Close();

Но учтите одну вещь: если форма вызова является основным окном приложения, когда вызывается метод Закрыть , все приложение будет закрыто, а вместе с ним будут закрыты и части формы. , Чтобы обойти это поведение, я бы запустил приложение с невидимой формой. Когда эта форма будет загружена, будет запущена ваша форма "вызывающего".

1 голос
/ 10 ноября 2011

Это можно сделать, просто вызвав метод Close () из формы, которую вы хотите закрыть. Вы пробовали это?

0 голосов
/ 08 апреля 2013

Я не уверен, как это в C ++, но в C # вы можете сделать это так

static Programm
{
    static bool run = true;
    static int state = 1;
    /// <summary>
    /// Der Haupteinstiegspunkt für die Anwendung.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        while (run)
        {
            Application.Run(getForm());
        }
    }

    static private Form getForm()
    {
        Form ret = null;

        switch (state)
        {
            case 1:
                ret = new Form1();
                break;
            case 2:
                ret = new Form2();
                break;
        }

        return ret;
    }

    static public void setState(int i)
    {
        if (i == 0)
        {
            run = false;
        }
        else
        {
            state = i;
        }
    }
}

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

...