【问题标题】:Strange: WinForms form closes automatically after button press奇怪:按下按钮后 WinForms 表单会自动关闭
【发布时间】:2012-06-09 15:55:10
【问题描述】:

我的应用是 WinForms .NET 4 (C#),其中一个表单在按下按钮后会自动关闭。

  • 表单具有默认的“接受”和“取消”按钮,但未触及这些按钮。
  • 有一个 ButtonTestConnection_Click 事件,当单击该事件时,它会完成它的工作,但会以某种方式关闭表单。
  • 我使用鼠标单击按钮,所以这不是级联击键的情况。
  • 我没有在此函数中设置 DialogResult。

我还尝试检查流浪 this.Close / this.Dispose 调用,但没有找到。

代码如下:

private void ButtonTestConnection_Click (object sender, System.EventArgs e)
{
    this.Enabled = false;
    this.Cursor = System.Windows.Forms.Cursors.WaitCursor;

    this.ProgressBar.Minimum = 0;
    this.ProgressBar.Maximum = 500;
    this.ProgressBar.Value = 0;

    this.ProgressBar.Visible = true;
    this.ButtonTestConnection.Visible = false;

    try
    {
        while (this.ProgressBar.Value < this.ProgressBar.Maximum)
        {
            // Some proxy code.
            this.ProgressBar.Value++;
        }
    }
    catch
    {
    }

    this.ProgressBar.Visible = false;
    this.ButtonTestConnection.Visible = true;

    this.ProgressBar.Invalidate();
    System.Windows.Forms.Application.DoEvents();
    System.Threading.Thread.Sleep(10);

    this.Cursor = System.Windows.Forms.Cursors.Default;
    this.Enabled = true;

    System.Windows.Forms.MessageBox.Show(result.ToString());
}

【问题讨论】:

  • 我感觉这可能与将按钮设置为未启用有关,这可能会转移焦点。还不确定。
  • 从事件处理程序中取出所有内容,然后开始一次添加一行以找出导致问题的行(使用二进制搜索进行优化)
  • 覆盖表单的 OnFormClosing 方法。在它上面设置一个断点并在它命中时查看调用堆栈。如果您无法理解,请将其发布在您的问题中。
  • 感谢您的建议。事实证明,史蒂夫的回答是这样的。

标签: c# .net winforms


【解决方案1】:

检查按钮上的属性DialogResult是否等于None
如果没有,那么当您点击该按钮时,表单将关闭,并且表单将返回 Button 的 DialogResult 属性的设置。

通常,当您复制/粘贴现有​​表单的按钮但忘记在粘贴的按钮上删除原始 DialogResult 设置时,经常会发生这种情况

【讨论】:

  • 为了证明这一点,我将从事件中分离按钮并单击它。我敢打赌,同样的结果也会发生。
  • 谢谢。毕竟这是一个复制粘贴问题。我以前从未注意到可以通过设计器访问 DialogResult,因为人们通常通过代码设置它。
  • 仍然发生在 .net 4.7.1 中。在我的情况下,我认为我没有直接在设计器中设置属性(没有意识到它在那里),但我确实在对话框和一些复制粘贴上做了“添加现有”,所以我有两个按钮像这样
猜你喜欢
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多