2011-02-03 4 views
0


У меня было достаточно тщательно взглянуть вокруг, но не смогли найти все, что связано, так что я решил спросить здесь :)C# Application.ApplicationExit создает нужно нажать кнопку «X» дважды

Я создал WinForm в Visual Studio, и в его коде есть несколько функций. На данный момент все работает хорошо. Затем я положил
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
в функцию конструктора, и когда я иду и нажимаю маленький крест в углу, я должен дважды щелкнуть его, чтобы он закрылся! Я бы поставил код здесь, но его 240 строк, поэтому его огромная .. Если вам нужно это увидеть, я могу это выразить.

Заранее благодарен!
Dronnoc

+0

Похож мыши или клавиатуре проблемой. Вы видите такое же поведение, если вы удаляете обработчик ApplicationExit? Вейшел вопрос. – hungryMind

+1

Возможно, вам стоит попробовать выяснить, какая строка вызывает это, прежде чем отправлять 200 строк кода. Попробуйте прокомментировать строки, пока они больше не проявляют этого поведения. Вы также можете захотеть найти что-то вроде e.cancel = true –

+0

@HungryMind: я могу с уверенностью сказать, что это не проблема с клавиатурой или мышью, если я создаю удаление этой строки, она работает красиво, но мне нужно запустить код в то время как приложение закрывается/закрывается. –

ответ

1

Я решил это народы!

У меня был ListBox на странице и функция, выполнявшаяся при изменении 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. 
     } 
    } 
} 
1

Событие ApplicationExit автоматически вызывается при нажатии на крест. Поэтому нет необходимости называть его. Что вы хотите сделать при закрытии?
Если вы хотите выполнить какое-либо действие между нажатием на крест и выключение, вы должны позвонить FormClosing() event.

+0

Присвойте событию 'FormClosing()' событие, сообщит о любых результатах. –

+0

Это тоже не удалось, теперь попробуйте предложение Конрада Фикса в комментариях оригинального сообщения. –

Смежные вопросы