【问题标题】:Allow the number of forms with a button click允许单击按钮的表单数量
【发布时间】:2013-06-13 18:24:35
【问题描述】:

我有这个“HOME”作为主表单......我有一个管理员登录按钮,可以打开管理员登录表单......但是该按钮应该将管理员登录表单的数量限制为只有

【问题讨论】:

标签: c# winforms


【解决方案1】:

使用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();
}

【讨论】:

  • +1 所有解决方案都是正确的。抱歉,没有看到您在编写我自己的答案时添加了第三个示例。决定离开它,因为较短的linq
  • 你的 LINQ 比我的好/短 :) +1
【解决方案2】:

一个简单的解决方案是在打开表单后设置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);
}

【讨论】:

  • 不要忘记在打开表格后实际设置标志:P
  • 遥遥领先!谢谢:)
【解决方案3】:

您可以使用Application.OpenForms 集合来检查登录表单是否已经打开,而不是为此使用布尔标志:

if (!Application.OpenForms.OfType<LoginForm>().Any())
{
    var loginForm = new LoginForm();
    loginForm.Show();
}

或者使用Form.ShowDialog()将登录表单打开为模态表单。

【讨论】:

    【解决方案4】:

    如果表单已经存在,请使用布尔变量来表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      相关资源
      最近更新 更多