C #, как скрыть одну форму и показать другую? - PullRequest
2 голосов
/ 12 июля 2011

Когда мой проект запускает Form1, загружает и проверяет лицензию программы на сервере, если все в порядке, он должен: показать Form2 и закрыть Form1. После этого, когда пользователь закроет Form2 с помощью «x», программа должна завершиться.

Как вы думаете, что будет лучшим способом сделать это?

Пока что добрался только до form2.Show:)

...
if (responseFromServer == "OK")
{
    Form2 form2 = new Form2();
    form2.Show();
}

Спасибо!

Ответы [ 6 ]

4 голосов
/ 12 июля 2011

Как вы, вероятно, знаете, если вы используете Form1 в качестве основной формы, вы не сможете закрыть ее, так как это закроет приложение (если вы не настроите способ запуска приложения, но это более продвинуто).

Один из вариантов - начать с создания формы Form2 в качестве основной формы, но оставить ее скрытой, затем создать и показать форму Form1, а затем, когда проверка лицензии будет завершена, закрыть форму Form1 и сделать форму Form2 видимой.

Или вы можете запуститьпоказывая Form1, а затем, когда проверка лицензии завершена, вызовите Form1.Hide(), а затем создайте и покажите Form2.Затем, когда пользователь Form2 закрывается, вызовите Form1.Close() в обработчике событий Form2.Closed:

class Form1
{
    private void Form1_Load(object sender, EventArgs e)
    {
        // do the license check, 
        // and then when the license check is done:
        if (responseFromServer == "OK")
        {
           Form2 form2 = new Form2();
           Form2.FormClosed += new FormClosedEventHandler(Form2_FormClosed);
           Form2.Show();
           this.Hide();
       }
       else
           this.Close();
    }


    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.Close(); // will exit the application     
    }
}
4 голосов
/ 12 июля 2011

Я использую что-то вроде этого.Код в Program.cs

public static bool IsLogged = false;

Application.Run(new FUserLogin());
if (!isLogged)
  Application.Exit();
else
Application.Run(new FMain());
3 голосов
/ 12 июля 2011

Вы можете показать первую форму, используя ShowDialog, который будет блокироваться, пока форма не закроется.Внутри Form1 вы можете просто вызвать this.Close (), когда он завершит обработку, и либо установить свойство DialogResult, либо (возможно, чище) вы можете создать открытое свойство, которое Form1 устанавливает перед его закрытием, и сделать так, чтобы вызывающий проверял это.Затем вы можете либо вернуться из Main напрямую, либо продолжить создание своего нового класса и передать его Application.Run ().

static class Program
{
  [STAThread]
  static void Main()
  {
    var form1 = new Form1();
    var result = from1.ShowDialog(); // Form1 can set DialogResult, or another property to indicate success

    if (result != DialogResult.OK) return; // either this
    if (!form1.ValidationSuccessful) return; // or this

    Application.Run(new Form2());
  }
}

Мне нравится это, потому что вы не ссылаетесь на Form2 из Form1, всекод для отображения формы 1 и выхода из приложения объединен в одном месте и может быть легко закомментирован для разработки или тестирования.

1 голос
/ 26 декабря 2014
//Login Form Load Events or Constructor
this.Close(); //first Close Login From               
Application.Run(new Main());//second Run Main Form
1 голос
/ 12 июля 2011

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

//Form1 code
if (responseFromServer == "OK")
{
this.Hide();
Form2 frm = new Form2();
frm.Show();
}

И вы можете выйти из приложения, используя метод Application.Exit () в событии закрытия формы Form2

1 голос
/ 12 июля 2011

Попробуйте скрыть Form1:

this.Hide();

, а затем в событии FormClosing Form2:

Form2_FormClosing(object sender, EventArgs e)
{
    Application.Exit();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...