Due forme diverse finestre in C #
Domanda
Sono nuovo di C # e programmazione .NET. Voglio progettare un'applicazione che si apre con un piccolo schermo di login e quando l'utente preme il pulsante "Login", il mio programma dovrebbe chiudere il form di login e passare ad una nuova forma. Come posso realizzare questo semplice processo?
Grazie.
Soluzione
Questa potrebbe essere una soluzione;
In LoginForm;
public bool IsLoggedIn { get; private set;}
public void LoginButton_Click(object sender, EventArgs e)
{
IsLoggedIn = DoLogin();
if(IsLoggedIn)
{
this.Close()
}
else
{
DoSomethingElse();
}
}
Nel Program.cs
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LoginForm loginForm = new LoginForm();
Application.Run(loginForm);
if (loginForm.IsLoggedIn)
{
Application.Run(new OtherForm());
}
}
Altri suggerimenti
A seconda della architettura complessiva della vostra applicazione, mi piace spesso di lasciare che il controllo di maschera principale lanciare la schermata di login.
//Program.cs:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
//MainForm.cs
private void MainForm_Load(object sender, EventArgs e)
{
this.Hide();
Login login = new Login();
if (login.ShowDialog() == DialogResult.OK)
{
//make assignments from login
currentUser = login.User;
}
else
{
//take needed action
Application.Exit();
return;
}
}
La sfida qui è quale forma si passa al metodo Application.Run (). Se si avvia l'applicazione con un'istanza del form di login e chiudere quella forma Credo che l'applicazione verrà uscire. Non c'è dubbio che ci sono diversi modi per gestire questo ...
Un modo è quello di passare un'istanza del modulo principale per il metodo Application.Run (questa lega il ciclo di messaggi a tale istanza la forma e non la forma di login). Nel metodo OnLoad della maschera principale è possibile utilizzare una finestra di dialogo modale per eseguire il login. cioè.
//--Main form's OnLoad method
protected override void OnLoad(EventArgs ea)
{
// Remember to call base implementation
base.OnLoad(ea);
using( frmLogin frm = new frmLogin() )
{
if( frm.ShowDialog() != DialogResult.OK )
{
//--login failed - exit the application
Application.Exit();
}
}
}
Se utilizzati .ShowDialog (), non dimenticate di avvolgerla attorno ad un blocco utilizzando, o utilizzare .Dispose sul modulo di login dopo aver terminato. dialoghi modello devono essere smaltiti manualmente.