2016-03-29 2 views
0

Так что прошло очень много времени с тех пор, как я работал с C#, и снова чувствую себя новичком. Я создаю простой графический интерфейс в проекте, который использует API, и мне нужно создать простую форму входа. У меня появляется вторая форма, когда кто-то нажимает «Войти» в основной форме, которая запрашивает имя пользователя и пароль, которые затем закрывают эту форму и сохраняют информацию в этом классе. Проблема в том, как я узнаю, когда эта форма закрыта?Передача информации через формы

Есть ли более простой способ сделать это, или способ вернуть имя пользователя и пароль при нажатии кнопки входа в дополнительную форму?

Основы моего кода следующим образом:

Main.cs

namespace My_Namespace { 
    public partial class frmMain : Form { 
     public frmMain() { 
      InitializeComponent(); 
     } 
    } 

    private void mnitLogin_Click(object sender, EventArgs e) { 
     Login login = new Login(); 
     login.ShowDialog(); 
    } 
} 

Login.cs

namespace My_Namespace { 
    public partial class Login : Form { 
     private String Username; 
     private String Password; 

     public Login() { 
      InitializeComponent(); 
     } 

     private void btnLogin_Click(object sender, EventArgs e) { 
      Username = txtUsername.Text; 
      Password = txtPassword.Text; 
      this.Close(); 
     } 

     public String getUsername() { 
      return Username; 
     } 

     public String getPassword() { 
      return Password; 
     } 
    } 
} 
+0

Я бы не рекомендовал хранить пароль в приложении. Как только вы аутентифицированы в API, вы получаете какой-то токен или cookie? – mason

+0

@mason Да, я знаю обо всем этом, но это не моя проблема. – Spedwards

ответ

0

Предполагая, что Login форма представляет собой пользовательскую форму, а не диалог по умолчанию, было бы легче получить доступ к событию «.Click» кнопки «Войти» и добавить обработчик перед его открытием.

После активации обработчика вы можете получить информацию, проверить их и закрыть форму входа (или вызвать сообщение, которое не соответствует действительности) от frmMain.

0

Выполнение продолжается в событии Click после завершения ShowDialog - это когда окно закрывается. Объект по-прежнему действителен, поэтому вы можете использовать login.getUsername() & login.getPassword()

+0

Я знаю, что именно поэтому он настроен так. Мне нужно знать в основной форме, когда форма входа закрывается немедленно. – Spedwards

+0

Точно, чего вы пытаетесь достичь? При возврате из ShowDialog в событии click вы можете установить флаг и передать значения обратно в MainWindow. – PaulF

0

Выяснил это через 30 минут поиска.

Добавив свойство DialogResult к кнопке в форме входа, я смог проверить, когда форма закрыта. Я должен был немного изменить способ формы открыта, а:

private void mnitLogin_Click(object sender, EventArgs e) { 
    Login login = new Login(); 
    if (login.ShowDialog() == DialogResult.OK) { 
     // Do stuff 
     loginToAPI(login.getUsername(), login.getPassword()); 
    } 
} 
0

Во многих окнах формируют проекты, которые я когда-либо работал у нас был статическим или одноэлементным класс для хранения некоторых данных, которые являются общими для всего приложения, например, :

public class SessionInfo 
{ 
    public static SessionInfo instance; 

    public static SessionInfo GetInstance(); 
    {   
     if(instance == null) 
      instance = new SessionInfo(); 

     return instance;   
    } 

    public string UserName {get; set;} 
    public string[] UserRoles {get; set;} 
} 
Смежные вопросы