Добавить функциональность в кнопку выхода Windows.Forms? - PullRequest
3 голосов
/ 02 июля 2010

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

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

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

    #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 a List перед выходом из формы Windows.

Ответы [ 3 ]

5 голосов
/ 02 июля 2010

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

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {

    }
4 голосов
/ 02 июля 2010
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;
   }
}
1 голос
/ 01 марта 2013

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

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

this.Closed += new EventHandler(theWindow_Closed);

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

private void theWindow_Closed(object sender, System.EventArgs e)
{
    //do the closing stuff
}
...