使用C#.NET 4.0进行编程是我最近的热情,我想知道如何在标准的Windows.Forms Exit按钮(表单右上角的红色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);
}
但是,在应用程序退出标准退出按钮之前,我如何附加方法。我希望在退出Windows窗体之前对列表进行XmlSerialize。
答案 0 :(得分:5)
如果要在表单关闭之前编写代码,请使用FormClosing事件
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
}
答案 1 :(得分: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;
}
}
答案 2 :(得分:1)
我找到的最佳方法实际上是创建一个EventHandler,它将调用您想要调用的方法。
在构造函数中:
this.Closed += new EventHandler(theWindow_Closed);
然后你创建方法:
private void theWindow_Closed(object sender, System.EventArgs e)
{
//do the closing stuff
}