【发布时间】:2013-06-13 18:24:35
【问题描述】:
我有这个“HOME”作为主表单......我有一个管理员登录按钮,可以打开管理员登录表单......但是该按钮应该将管理员登录表单的数量限制为只有
【问题讨论】:
我有这个“HOME”作为主表单......我有一个管理员登录按钮,可以打开管理员登录表单......但是该按钮应该将管理员登录表单的数量限制为只有
【问题讨论】:
使用ShowDialog() 显示登录表单 -> 只要登录表单可见,这将阻止其他表单,或者跟踪打开的表单,并且在打开登录表单时单击按钮不执行任何操作。
第一个例子:
private void ButtonClick(object sender, EventArgs e)
{
var frm = new LoginForm();
frm.ShowDialog();
}
第二个例子:
private LoginForm form;
private void ButtonClick(object sender, EventArgs e)
{
if (form != null)
{
if (form.Visible)
{
return;
}
form.Show();
}
else
{
form = new LoginForm();
form.Show();
}
}
第三个例子(使用 LINQ):
private void ButtonClick(object sender, EventArgs e)
{
if (Application.OpenForms.Cast<Form>().Any(x => x.GetType() == typeof(LoginForm)))
{
return;
}
var frm = new LoginForm();
frm.Show();
}
【讨论】:
一个简单的解决方案是在打开表单后设置boolean flag。
bool AdminFormOpen;
private void adminLoginBtn_click()
{
if(!AdminFormOpen)
{
// Open the form.
AdminFormOpen = true;
}
}
然后,在 Admin Form 中,确保通过 mutator 方法重置此值。比如:
protected void OnClosed(EventArgs e)
{
parentForm.setAdminFormOpen(false);
}
【讨论】:
您可以使用Application.OpenForms 集合来检查登录表单是否已经打开,而不是为此使用布尔标志:
if (!Application.OpenForms.OfType<LoginForm>().Any())
{
var loginForm = new LoginForm();
loginForm.Show();
}
或者使用Form.ShowDialog()将登录表单打开为模态表单。
【讨论】:
如果表单已经存在,请使用布尔变量来表示。
【讨论】: