【问题标题】:Window form does not close窗体不关闭
【发布时间】:2011-08-21 12:55:59
【问题描述】:

大家好,我是 Windows 应用程序的新手。

我有一个表单,我在该表单上向其他表单显示了登录按钮单击事件。像我在用户验证后显示的其他两个表单后有一个登录页面的示例。但我想在用户登录表单的身份验证后应该关闭,但其他两个保持打开状态。

以下是代码,我的登录表单名称是LogIn.cs

private void btnLogIn_Click(object sender, EventArgs e)
{
    if(ValidateUser())
    {
       //Form1

        DetailForm form = new DetailForm(txtUserName.Text.ToString());
        form.Show();

        //Form2

        Progressbar progress = new Progressbar();
        progress.Show();
    }
}

请写一些代码

【问题讨论】:

  • 顺便说一句:Progressbar 不是表单,或者我不完全理解您的代码 - 抱歉

标签: c# windows


【解决方案1】:

您可以使用Form.Close()关闭表单

【讨论】:

  • 然后你关闭了你的主表单,这导致关闭所有作为子表单创建的表单。
  • 那是因为您正在关闭主应用程序表单,这会导致应用程序退出......您应该更改在 program.cs 中打开登录表单的方式
  • 你是对的,我的应用程序退出...但是它将如何解决?
  • 我假设 DetailForm 要求输入密码?您可以使用输入控件的 OnLeave 事件来执行以下操作:/*close the dialog if the password seems valid also, give the form a public variable that the parent form can read */ if (true == MyValidateFunction(txtPassword.Text)) { this.storedPassword = txtPassword.Text; this.Close(); } 编辑:bah - 我无法在代码中添加换行符。
【解决方案2】:
private void btnLogIn_Click(object sender, EventArgs e)
{
    if(ValidateUser())
    {
       //Form1

        DetailForm form = new DetailForm(txtUserName.Text.ToString());
        form.Show();

        //Form2

        Progressbar progress = new Progressbar();
        progress.Show();
        this.Close();
    }
}

【讨论】:

  • this.Close() 将关闭父窗体而不是 DetailForm。如果您在上面的示例中使用 form.close() 而不是 this.Close(),DetailForm 将关闭。
  • 好的,好建议。我指出您必须在显示其他表单后调用Close() 方法,因为如果您先关闭唯一的活动表单,那么应用程序将自动关闭。如果您仍希望稍后再调用该表单,请使用 Form.Hide()
【解决方案3】:

您可以使用的每个表单都有一个“关闭”方法。

【讨论】:

    【解决方案4】:

    问题是你的应用程序的主消息循环是在登录表单中,这意味着如果你停止这个消息循环,你的应用程序就会停止。
    就我个人而言,我不会让登录表单拥有您的应用程序的主要消息循环。我不会从 LogIn 表单中打开 DetailForm 和 ProgressBar,这没有多大意义。我会创建一些控制所有这些的父类。
    如果您确实希望 LogIn 表单成为应用程序的主窗体,但在用户登录后将其隐藏,您可以使用 Hide(),或者在单独的线程或进程中运行两个子窗口(不强烈推荐)。

    【讨论】:

    • 找到解决方案...我刚刚调用了 Hide() 方法来调用其他页面:) 不需要单独的线程等...
    【解决方案5】:

    是的,正要说 tat,却注意到你的最后评论!具有 ValidateUser 的表单是您的 LoginForm .. 您的问题不是很清楚。所以不能关闭。如果你不希望它在后台,你应该隐藏它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多