C#Application.ApplicationExit需要单击';X';两次

C#Application.ApplicationExit需要单击';X';两次,c#,winforms,debugging,C#,Winforms,Debugging,我对周围进行了相当彻底的调查,但找不到任何相关信息,因此我决定在这里提问:) 我在VisualStudio中创建了一个WinForm,它的代码中有相当多的函数。在这一点上,一切都很顺利。然后我去放 Application.ApplicationExit+=新事件处理程序(Application\u ApplicationExit) 在构造函数中,当我点击角落里的小十字时,我必须点击它两次,它才能关闭!我想把代码放在这里,但它有240行,所以它有点大。。如果你需要看的话,我可以把它挂起来 提前谢谢


我对周围进行了相当彻底的调查,但找不到任何相关信息,因此我决定在这里提问:)

我在VisualStudio中创建了一个WinForm,它的代码中有相当多的函数。在这一点上,一切都很顺利。然后我去放
Application.ApplicationExit+=新事件处理程序(Application\u ApplicationExit)
在构造函数中,当我点击角落里的小十字时,我必须点击它两次,它才能关闭!我想把代码放在这里,但它有240行,所以它有点大。。如果你需要看的话,我可以把它挂起来

提前谢谢

dronoc

单击十字会自动调用ApplicationExit事件。所以实际上没有必要打电话给它。结账时您想做什么?

如果你想在点击十字键和关机之间进行一些操作,你必须调用

我已经解决了

我在页面上有一个列表框,当SelectedIndex更改时,一个函数正在运行。当我关闭表单时,它传递了一个SelectedIndex-1,然后第二次关闭。因此,为了修复它,我只需在ListBox函数中对值进行一些简单的验证

例如:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);
        }

        void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}  
变成

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);
        }  

        void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(listBox1.SelectedIndex == -1)
            {
                Application.Exit();
            }
            //Rest of the code goes here.
        }
    }
}

看起来像是鼠标或键盘问题。如果删除ApplicationExit处理程序,是否会看到相同的行为?在发布200多行代码之前,您可能应该尝试找出导致此问题的原因。尝试注释行,直到它不再显示此行为。您可能还需要查找类似e.cancel的内容=true@HungryMind:我可以有把握地说,这不是键盘或鼠标的问题,如果我创建或删除该行,它会很好地工作,但我需要在应用程序关闭/关闭时运行一些代码。@Conrad Fix:我正在经历这个过程,完成后应报告。应给
FormClosing()
事件一个镜头,将报告任何结果。这也失败了,现在应尝试康拉德·菲克斯在原始帖子评论中的建议。