私のwinformアプリケーションでは; ログインフォームとメインフォームがあります。
プログラムを実行すると、ログインフォームが一番上に、メインフォームがその後ろに表示されます。
もう1つ、ユーザー名とパスワードで適切にログインしない限り、メインフォームにはアクセスできず、ログインフォームのみにアクセスできるはずです。
私の言語は C#.Net です。
これを達成する方法についてアイデアを提供してください。
イベント (フォームが最初に表示されるたびに発生Form.ShowDialog
します) で (フォームをモーダル ダイアログ ボックスとして表示します) を使用します。Form.OnShown
private void Form1_Load(object sender, EventArgs e)
{
this.Shown += Form1_Shown;
}
private void Form1_Shown(object sender, EventArgs e)
{
LoginForm loginForm = new LoginForm ();
if (loginForm.ShowDialog() == DialogResult.Ok)
{
....
}
}
あなたProgram
とLoginForm
このように:
//Progrmm.cs
Application.Run(new Form1());
//LoginForm.cs
public partial class LoginForm : Form
{
public LoginForm ()
{
InitializeComponent();
}
private void buttonLogin_Click(object sender, EventArgs e)
{
//check username password
if(texboxUser == "user" && texboxPassword == "password")
{
DialogResult = DialogResult.OK;
Close();
}
else
{
MessageBox.Show("Wrong user pass");
}
}
}
私はあなたが提案したデザインが好きではありません.最初にログインフォームを表示し、次にメインフォームを表示したいと思います. しかし、絶対に必要な場合は、以下を実行できます..
メインクラスでは:
Application.Run(new frmMain());
そしてフォームクラスで:
private void frmMain_Load(object sender, EventArgs e)
{
//---------------------------------------------
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
t.Tick +=new EventHandler(t_Tick);
t.Interval = 1000;
t.Start();
}
void t_Tick(object sender, EventArgs e)
{
frmLogin l = new frmLogin();
if (l.ShowDialog(this) == DialogResult.Ok)
((System.Windows.Forms.Timer)sender.Dispose();
}
適切なユーザー名とパスワードなしでログインフォームが終了しないことをさらに確認する必要がありますが(それはあなた次第です)
System.Windows.Forms.Timer は同じスレッドで実行されるため、メイン フォームへの呼び出しがブロックされるため (System.Timers.Timer とは異なります)、System.Windows.Forms.Timer を使用します。