你遇到的问题是将 System.EventArgs
类型的对象强制转换为 System.Windows.Forms.FormClosingEventArgs
类型时失败了。这种错误通常发生在事件处理程序中,当你尝试将一个更通用的事件参数类型转换为更具体的事件参数类型时。
System.EventArgs
是所有事件参数类的基类,而 System.Windows.Forms.FormClosingEventArgs
是一个更具体的类,用于表示窗体关闭事件。当你尝试将一个 System.EventArgs
对象转换为 System.Windows.Forms.FormClosingEventArgs
对象时,如果原始对象实际上并不是 System.Windows.Forms.FormClosingEventArgs
类型的实例,就会发生类型转换错误。
is
关键字或 GetType()
方法来进行类型检查。is
关键字或 GetType()
方法来进行类型检查。FormClosing
事件。FormClosing
事件。以下是一个完整的示例,展示了如何正确处理窗体关闭事件:
using System;
using System.Windows.Forms;
public class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (e is FormClosingEventArgs formClosingArgs)
{
// 现在可以安全地使用 formClosingArgs
bool cancel = formClosingArgs.Cancel;
if (MessageBox.Show("Are you sure you want to close the form?", "Close Confirmation", MessageBoxButtons.YesNo) == DialogResult.No)
{
formClosingArgs.Cancel = true;
}
}
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
通过上述方法,你可以避免类型转换错误,并正确处理窗体关闭事件。
领取专属 10元无门槛券
手把手带您无忧上云