【问题标题】:C# Form Closing eventC# 表单关闭事件
【发布时间】:2014-06-17 02:12:56
【问题描述】:

我是学校的初级程序员,我们必须做一个大项目,我的一个表单关闭有问题,特别是自己制作的表单“关闭事件”。

 private void sluitenToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (MessageBox.Show("Het programma wordt hiermee gesloten.\nBent u zeker dat u wilt sluiten en uitloggen?",
            "Waarschuwing , u staat op het moment het programma te sluiten",MessageBoxButtons.YesNo, 
            MessageBoxIcon.Exclamation) == DialogResult.Yes)
        {
            Application.Exit();
        }
    }

    private void window_Closing(object sender, FormClosingEventArgs e)
    {
        if(MessageBox.Show("Bent u zeker dat u wilt uitloggen?","Waarschuwing , u staat op het moment uit te loggen",
             MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
        {

            loginForm.Show();
        }
        else
        {
            e.Cancel = true;
        }

现在我的问题是当我使用 sluitenToolStripMenuItem_Click 并按下是按钮时,它将关闭我的应用程序,这将触发 window_Closing 事件。 但我只希望 window_Closing 事件在我的用户点击右上角的大红色 X 时发生,而不是在用户点击我的工具条项目时发生。 提前感谢
另外,如果有人对制作好的 GUI 有任何提示,那就太好了;) (我来自比利时,很抱歉我的代码中的荷兰语)

【问题讨论】:

  • 这是执行此操作的标准方法 - 您的 eventargs 中的 CloseReason.UserClosing 表示您已单击 [X] 或按下 Alt+F4
  • 安德鲁,如果我的用户在我的工具箱中按下我的关闭功能,这仍然是我的用户点击某些东西,所以我的用户将是我的事件仍然会发生的原因。我喜欢的是 private void window_Closing(object sender, RedcrossEvent) 所以我可以更改 Red X 事件,而不是每次尝试关闭我的表单
  • 为此,您可以在 FormClosing 事件中检查发件人

标签: c# messagebox formclosing


【解决方案1】:

您可以保留一个变量来存储生成事件的状态。

bool ClosedFromMenu = false;
private void sluitenToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (MessageBox.Show("Het programma wordt hiermee gesloten.\nBent u zeker dat u wilt sluiten en uitloggen?",
        "Waarschuwing , u staat op het moment het programma te sluiten",MessageBoxButtons.YesNo, 
        MessageBoxIcon.Exclamation) == DialogResult.Yes)
    {
        ClosedFromMenu = true;
        Application.Exit();
    }
}

private void window_Closing(object sender, FormClosingEventArgs e)
{
   if(!ClosedFromMenu)
   {
    if(MessageBox.Show("Bent u zeker dat u wilt uitloggen?","Waarschuwing , u staat op het moment uit te loggen",
         MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
    {

        loginForm.Show();
    }
    else
    {
        e.Cancel = true;
    }
   }
}

【讨论】:

  • 我正在考虑做这个,但我的教授总是说我使用了太多 if/else 所以我没有这样做。因此,如果有其他方法会很棒。但是谢谢你的回答!
【解决方案2】:

在您的FormClosing 事件中,您可以查看sendere.CloseReason

例如FormClosing 事件处理程序中的以下代码:

if (e.CloseReason != CloseReason.UserClosing)
{
    //......
}

如果您按下Alt+F4 或单击[X] 按钮,将不会执行。

http://msdn.microsoft.com/en-us/library/system.windows.forms.closereason%28v=vs.110%29.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多