【问题标题】:How to know if user clicked on X in the form [duplicate]如何知道用户是否点击了表单中的 X [重复]
【发布时间】:2013-05-21 12:17:44
【问题描述】:

感谢所有努力回答我问题的人。

我正在使用 WinForms C#,在 MainForm_Load 上,我正在为用户调用登录表单。登录表单包含 X 按钮(右上角的默认按钮)和登录按钮。

现在...

如果用户决定单击 X 按钮,登录表单将关闭,MainForm 也应该关闭,我知道该怎么做。但是...如果用户单击 LoginButton,LoginForm 应该关闭,但 MainForm 应该保持打开状态。

你知道怎么做吗?

【问题讨论】:

  • 如何显示登录表单?

标签: c# winforms


【解决方案1】:

假设您使用ShowDialog 显示登录表单,那么您可以这样做:

if(LoginForm.ShowDialog() == DialogResult.OK)
{
   //login ok
}

您的登录表单应在关闭之前将 DialogResult 设置为 OK,但仅用于成功登录,如下所示:

if(LoginSuccess){
    this.DialogResult = DialogResult.OK;//this will also close the form
}

【讨论】:

  • 您不需要 Close() 调用;设置 DialogResult 自动隐藏表单并将执行返回到 ShowDialog() 行。
  • @Idle_Mind:嗯……从来不知道。不过我不喜欢它,这不是我期望设置属性的行为
【解决方案2】:

您可以在Form.FormClosing 活动中查看e.CloseReason

Private Sub YourForm_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    If e.CloseReason = CloseReason.UserClosing Then
        'Closed by user
        '
        'Do something like
        'Application.Exit()
        '
        'or close both forms
    Else
        'Other close reason
    End If
End Sub

如果单击 X 或用户按 Alt + F4,CloseReason 将是 UserClosing。

【讨论】:

    【解决方案3】:

    这是另一种选择:

    您可以通过将登录表单的 ControlBox 属性设置为 False

    来禁用登录表单中的 X 按钮

    【讨论】:

      【解决方案4】:

      在登录按钮的单击事件处理程序上,添加对 this.Close() 的调用

      这应该关闭登录表单,而不影响主表单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        • 1970-01-01
        • 2018-05-12
        • 2019-12-25
        相关资源
        最近更新 更多