C# および .NET プログラミングは初めてです。小さなログイン画面で開くアプリケーションを設計したいのですが、ユーザーが「ログイン」ボタンを押すと、プログラムはログインフォームを閉じて新しいフォームに渡す必要があります。この単純なプロセスをどのように達成できますか?
ありがとう。
これは解決策になる可能性があります。
ログインフォームで;
public bool IsLoggedIn { get; private set;}
public void LoginButton_Click(object sender, EventArgs e)
{
IsLoggedIn = DoLogin();
if(IsLoggedIn)
{
this.Close()
}
else
{
DoSomethingElse();
}
}
program.cs 内
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LoginForm loginForm = new LoginForm();
Application.Run(loginForm);
if (loginForm.IsLoggedIn)
{
Application.Run(new OtherForm());
}
}
アプリケーションの全体的なアーキテクチャにもよりますが、ログイン画面の起動をメイン フォームで制御したいことがよくあります。
//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;
}
}
ここでの課題は、Application.Run() メソッドに渡すフォームです。ログイン フォームのインスタンスを使用してアプリケーションを起動し、そのフォームを閉じると、アプリケーションは終了すると思います。これを処理するにはいくつかの方法があることは間違いありません...
1 つの方法は、メイン フォームのインスタンスを Application.Run メソッドに渡すことです (これにより、メッセージ ループがログイン フォームではなくそのフォーム インスタンスに関連付けられます)。メイン フォームの OnLoad メソッドでは、モーダル ダイアログを使用してログインを実行できます。すなわち
//--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();
}
}
}
.ShowDialog() を使用する場合は、それを using ブロックで囲むか、完了後にログイン フォームで .Dispose を使用することを忘れないでください。モデル ダイアログは手動で破棄する必要があります。