C#开发案例精粹
上QQ阅读APP看书,第一时间看更新

bt2-L 实例010 在窗体关闭之前加入确认对话框

实例说明

用户对程序进行操作时,难免会有错误操作的情况,例如不小心关闭程序,如果尚有许多资料没有保存,那么损失将非常严重,因此最好使程序具有灵活的交互性。人机交互过程一般都是通过对话框来实现的,对话框中有提示信息,并且提供按钮让用户选择,例如“是”或“否”。这样用户就能对所做的动作进行确认。正如前面所说的不小心关闭程序,如果在关闭程序之前提示用户将要关闭程序,并且提示用户选择是否继续下去,这样可大大减少误操作现象。本实例中的窗体在关闭时会显示一个确认对话框,该对话框中有两个按钮“是”与“否”,代表是否同意关闭窗体的操作。实例运行结果如图1.11所示。

图1.11 在窗体关闭之前加入确认对话框

技术要点

窗体正要关闭但是没有关闭时会触发FormClosing事件,该事件中的参数FormClosing EventArgs e中包含Cancel属性,如果设置该属性为true,窗体将不会被关闭。因此在该事件处理代码中可以提示用户是否关闭窗体,如果用户不想关闭窗体,则设置该属性为true。利用MessageBox参数的返回值可以知道用户所选择的按钮。下面详细介绍一下相关属性。

CancelEventArgs.Cancel属性用来获取或设置指示是否应取消事件的值。其语法如下:

public bool Cancel { get; set; }

如果应取消事件,属性值为true,否则为false。

实现过程

01 新建一个项目,将其命名为QueryClose,默认窗体为Form1。

02 主要代码。

01   private void Form1_FormClosing(object sender, FormClosingEventArgs e)
02   {
03       //当单击"是"按钮时
04       if(MessageBox.Show("将要关闭窗体,是否继续?", "询问", MessageBoxButtons.YesNo) == 
                           DialogResult.Yes)
05       {
06           e.Cancel = false;               //不取消事件的值
07       }
08       else//当单击"否"按钮时
09       {
10           e.Cancel = true;                //取消事件的值
11       }
12   }

举一反三

根据本实例,读者可以实现以下功能。

使窗体的关闭按钮无效。

在系统托盘菜单中显示关闭按钮。