2010-07-02 4 views
3

Программирование на C# .NET 4.0 - моя последняя страсть, и я хотел бы знать, как добавить функциональность к стандартной кнопке выхода Windows.Forms (красный X в правом верхнем углу формы).Добавить функциональность в кнопку выхода Windows.Forms?

Я нашел способ отключить кнопку, но поскольку я думаю, что это компрометирует пользовательский эксперимент, я хотел бы подключить некоторые функции вместо этого.

Как отключить кнопку выхода:

#region items to disable quit-button 
    const int MF_BYPOSITION = 0x400; 
    [DllImport("User32")] 
    private static extern int RemoveMenu(IntPtr hMenu, int nPosition, int wFlags); 
    [DllImport("User32")] 
    private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 
    [DllImport("User32")] 
    private static extern int GetMenuItemCount(IntPtr hWnd); 
    #endregion 

...

private void DatabaseEditor_Load(object sender, EventArgs e) 
    { 
     this.graphTableAdapter.Fill(this.diagramDBDataSet.Graph); 
     this.intervalTableAdapter.Fill(this.diagramDBDataSet.Interval); 

     // Disable quit-button on load 
     IntPtr hMenu = GetSystemMenu(this.Handle, false); 
     int menuItemCount = GetMenuItemCount(hMenu); 
     RemoveMenu(hMenu, menuItemCount - 1, MF_BYPOSITION); 
    } 

Но как на земле, я придаю метод, перед выходом из приложения со стандартным экзит-кнопки. Я хотел бы XmlSerialize List перед выходом из формы Windows.

ответ

4
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    if(MessageBox.Show("Are you sure you want to exit?", "Confirm exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) 
    { 
     e.Cancel = true; 
    } 
} 
+0

Thanx Paul! Это сделало трюк :) BR –

+0

Для записи событие называется 'FormClosing', поэтому при добавлении метода с помощью инспектора свойств он вызывает метод' Form1_FormClosing'. Я не мог понять, почему не было события «Закрытие», и понял, что это на самом деле «FormClosing». – styfle

5

Если вы хотите писать коды, прежде чем форма закрыта, используйте FormClosing событие

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 

    } 
+0

Thanx Серкан! Это сделало трюк :) BR –

+0

Ваш прием ... –

1

Лучший способ, который я нашел на самом деле создать EventHandler, который будет вызывать метод, который вы хотите назвать ,

В конструкторе:

this.Closed += new EventHandler(theWindow_Closed); 

Затем вы создаете метод:

private void theWindow_Closed(object sender, System.EventArgs e) 
{ 
    //do the closing stuff 
} 
Смежные вопросы