3

我有 VS 2010,想通过 Yes|No|Cancel 对话框取消表单关闭事件,但是当我将 e.Cancel 放入对话框的事件处理程序中时,我收到一条错误消息,显示“'System.EventArgs'不包含“取消”的定义,并且找不到接受“System.EventArgs”类型的第一个参数的扩展方法“取消”(您是否缺少 using 指令或程序集引用?)。此外,“取消”一词下方有一条红线。我在网上阅读的所有内容都说这是取消 FormClosing 事件的唯一方法。我在 VS2008 中测试了代码,它做了同样的事情。

事件处理程序的代码如下:

private void displayMessageBox(object sender, EventArgs e)
        {
        DialogResult result = MessageBox.Show("Do you want to save the changes to the document before closing it?", "MyNotepad",MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
        if (result == DialogResult.Yes)
        {
            saveToolStripMenuItem_Click(sender, e);
        }
        else if (result == DialogResult.No)
        {
            rtbMain.Clear();
            this.Text = "Untitled - MyNotepad"; 
        }
        else if (result == DialogResult.Cancel)
        {
            // Leave the window open.
            e.Cancel() = true;


        }

以下是用途(如果它有所作为):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
4

4 回答 4

5

Form.FormClosing使用 aFormClosingEventArgs而不是 just EventArgs

你需要使用:

private void displayMessageBox(object sender, FormClosingEventArgs e)

如果您使用较旧的Form.Closing事件,则将其定义为 a CancelEventHandler,它使用CancelEventArgs,而不是EventArgs

private void displayMessageBox(object sender, CancelEventArgs e)

使用其中任何一个,您可以执行以下操作:

 e.Cancel = true;
于 2012-07-30T19:55:34.747 回答
5

FormClosing事件自己的 EventArgs 子类,您应该将其作为事件处理程序的参数:

private void displayMessageBox(object sender, FormClosingEventArgs e)
{
    DialogResult result = MessageBox.Show("Do you want to save the changes to the document before closing it?", "MyNotepad", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
    if (result == DialogResult.Yes)
    {
        saveToolStripMenuItem_Click(sender, e);
    }
    else if (result == DialogResult.No)
    {
        rtbMain.Clear();
        this.Text = "Untitled - MyNotepad"; 
    }
    else if (result == DialogResult.Cancel)
    {
        // Leave the window open.
        e.Cancel = true;
    }
}

此外,e.Cancel是一个属性,您将其称为方法。括号需要去掉。

于 2012-07-30T19:56:51.663 回答
0

使用FormClosingEventArgs方法签名中的类型:

private void displayMessageBox(object sender, FormClosingEventArgs e)

和:

e.Cancel = true;

或者将引用转换为该类型来访问它:

((FormClosingEventArgs)e).Cancel = true;
于 2012-07-30T20:01:43.317 回答
0

这很容易>>

使用FormClosing事件:

private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
    displayMessageBox(this, e);
}

private void displayMessageBox(object sender, FormClosingEventArgs e)
{
    DialogResult result = MessageBox.Show("Do you want to save the changes to the document before closing it?",
                                            "MyNotepad", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
    if (result == DialogResult.Yes)
    {
         saveToolStripMenuItem_Click(sender, e);
    }
    else if (result == DialogResult.No)
    {
           rtbMain.Clear();
        this.Text = "Untitled - MyNotepad";
    }
    else if (result == DialogResult.Cancel)
    {
        // Leave the window open.
        e.Cancel = true;


    }

}
于 2012-07-30T20:06:17.687 回答