在我的 winform 应用程序中;我有登录表单和主表单。
当我运行程序时,我希望登录表单位于顶部,主表单位于其后面。
还有一件事是,在我没有使用用户名和密码正确登录之前,主表单应该无法访问,只有登录表单应该可以访问。
我的语言是 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());
然后在 Form 类中:
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 不同)