2012-06-15 9 views
4

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

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

Теперь, когда я хочу, чтобы показать главную форму, я называю dispose() метод FrmLogin класса, но приложение немедленно заканчивается. Мое решение меняет visible объект FrmLogin класс на false, и я знаю, что это неправильно, пожалуйста, предложите способ для этого.

ответ

1

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

static class Program 
{ 
    public static bool isValid = false; 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     using (FrmLogin login = new FrmLogin()) 
     { 
      login.ShowDialog(); 
      if (isValid) 
      {   
       Application.Run(new MainForm()); 
      } 
     } 
    } 
} 

в вашем FrmLogin, выполните проверку и установите DialogResult как Ok. Здесь я сделал это на событии нажатия кнопки.

private void btnLogin_Click(object sender, EventArgs e) 
{ 

    Program.isValid= true; // impliment this as method 
    if(Program.isValid) 
    { 
     this.DialogResult = DialogResult.OK; 
     // or this.Close(); 
    } 
    else 
    { 
     //else part code 
    } 
} 
+0

спасибо. оно работает. и я нахожу интересным то, что класс 'loginform' может использоваться как диалог – cloud

+0

Я бы не рекомендовал этот подход со статическим bool, это не очень хороший дизайн и имеет несколько недостатков. Как я уже упоминал в своем ответе, метод ShowDialog имеет возвращаемое значение - это значение свойства DialogResult, когда форма закрыта. Используя этот метод, вы избегаете ненужных связей между различными объектами. – Onkelborg

+0

@Onkelborg, то как вы отправляете статус входа в систему? мы не можем отправить его в качестве результата диалога. согласился с вами о статическом bool. но должен быть способ удерживать статус входа. – Damith

2

Как насчет того, чтобы вы сделали второй APplication.Run после того, как логин завершился;) Подождите, пока он закроется, выполните вход, затем Application.Run для второй формы, которая является основной формой.

Btw., "FrmLogin" является нарушением шаблонов имен .NET. Вы, кажется, старая рука VB (это был образец оттуда). Это должен быть LoginForm.

+0

спасибо, я постараюсь it.plus, я не программист VB. Я использую C++ больше ~~ – cloud

+0

, и я изменю его на LoginForm, hah, еще раз спасибо – cloud

+0

вот как я пишу 'this.Dispose(); Application.Run (new MainForm());' но он все еще не работает – cloud

1
var loginForm = new LoginForm(); 
if(loginForm.ShowDialog() != dont_remember_see_intellisense_or_docs.OK) 
    return; 
var mainForm = new MainForm(); 
Application.Run(mainForm); 

Это отобразит форму входа в систему как диалог. В вашем LoginForm вы должны установить возвращаемое значение то подходящее (т.е. OK.), Чтобы показать MainForm

+0

Это эффективное решение, спасибо. – cloud

-2

Чтобы показать другую форму Myform от FrmLogin просто позвонить

myForm window = new window() 
window.MDIparent = ParentForm; 
window.Show(); 
+0

Не ответ на этот вопрос – Onkelborg

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