2009-11-27 2 views
2

Мне интересно, как закрыть форму после того, как я открою новую форму.Как закрыть форму и открыть новую форму?

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

Итак, как бы я это сделал?

Я делаю эти формы на компактных версиях Windows Mobile 6. Не уверен, что это будет иначе, чем в формах окон.

ответ

1

Если основная форма - это окно входа в систему, вы можете ее скрыть, так как если вы ее закроете, все остальные дочерние окна тоже будут закрыты. У вас есть 2 варианта. Я думаю:

1- Составьте форму заявки, основную. Когда приложение запускается, скройте его и отобразите окно входа в систему. Когда окно входа в систему закрыто, отобразите основную форму.

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

+0

Как насчет того, если это не основная форма? Как я, если я это сделаю -> Логин -> Вторая форма -> Третья форма. Могу ли я хотя бы закрыть вторую форму? – chobo2

+0

Самый простой способ - сохранить одну форму в качестве основной, ее можно всегда скрывать. Вы можете избежать этого, вызвав Application.Run (...); несколько раз, но вы, скорее всего, потеряете контекст приложения между этими вызовами. –

1

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

0

Просто позвоните Form.Close().

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

4

Могли бы сделать это следующим образом:

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     if (DialogResult.OK == new LoginForm().ShowDialog()) 
     { 
      Application.Run(new MainForm()); 
     } 
    } 
} 

если обеспечить LoginForm закрывается DialogResult.OK если действительные учетные данные и с DialogResult.Cancel иначе:

private void ValidateLogin(...) 
{ 
    ... // check credentials 

    if(validCredentials) 
    { 
    this.DialogResult = DialogResult.OK; 
    this.Close(); 
    } 
    else 
    { 
    ... // up to you, maybe keep the form displayed to give user a chance to enter correct credentials 
    } 
} 

}

Не нужно ничего скрывать.

0

Я сумасшедший, но я предлагаю использовать только одну форму. Сделайте остальные свои формы UserControls и просто замените их в основной форме. Тогда вам не нужно беспокоиться об этом мусоре.

Мой Program.cs обычно выглядит примерно так:

public class Program 
{ 
    static void Main() 
    { 
     MyApp application = new MyApp(); 
     application.Initialise(); 
     Application.Run(application.MainForm); 
    } 
} 

Таким образом, я могу держать инициализацию и логику вне форм.

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