C# 表单设计器和名称空间

C# 表单设计器和名称空间,c#,visual-studio-2010,C#,Visual Studio 2010,我经常使用的DLL中有一个静态事件-Toolkit.Dialogs.ExitConfirm 使用此事件的唯一方法是修改form.Designer.cs中添加事件的行。例如: this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); 变成 this.FormClosing += new System.Windows.Forms.FormClosingEventHand

我经常使用的DLL中有一个静态事件-Toolkit.Dialogs.ExitConfirm

使用此事件的唯一方法是修改form.Designer.cs中添加事件的行。例如:

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
变成

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(Toolkit.Dialogs.ExitConfirm);
如果我试图通过Properties->Events页面添加它,则会出现以下错误:“Toolkit.Dialogs.ExitConfirm”不是有效的标识符

是否有一种方法允许表单设计器引用来自其他类/名称空间的事件

编辑:有些人在视觉提示方面做得更好,因此这里有一些图像来定义问题:

第一幅图显示了我必须如何使它在VisualStudio中工作—一个调用事件的事件

第二幅图显示了我实际上在做什么


第三个图像是我手动输入方法名称时发生的错误。

您可以在应用程序窗体的窗体关闭事件中调用此方法“Toolkit.Dialogs.ExitConfirm”,并将所需的参数传递给Toolkit.Dialogs.ExitConfirm

WinForms designer并不是为此而设计的。我有点惊讶,下次你改变设计时,它不会丢失你的活动

关于其他方法的一些想法,你可以让这项工作:

  • 您可以创建一个表单类来为您钩住事件,并从该基类派生所有其他表单。然后你就会到处都有这种行为
  • 您可以创建一个实用方法来钩住事件,并从每个表单的构造函数中调用它
  • 您可以创建一个扩展方法来钩住事件,然后显示表单,并在显示表单的任何地方调用扩展方法(而不是调用
    show
基类可能是最简单的解决方案,只要您还没有将表单继承用于其他目的

我在DLL中有一个静态事件

你没有,你只有一个方法。FormClosing是事件,如果您的方法具有正确的签名,则它可以是事件处理程序方法。设计师根本不支持您尝试做的事情,您必须停止尝试。有两种合理的解决方案,都涉及在form类中编写代码。首先,您可以在构造函数中执行此操作:

    public Form1() {
        InitializeComponent();
        this.FormClosing += Toolkit.Dialogs.ExitConfirm;
    }
或者是理智的,因为一个类听自己的事件是没有意义的:

    protected override void OnFormClosing(FormClosingEventArgs e) {
        Toolkit.Dialogs.ExitConfirm(this, e);
        if (!e.Cancel) base.OnFormClosing(e);
    }
当你从这个派生出另一个形式时,它有着正常工作的巨大优势。这也是一个强烈的暗示,你可能真的应该做什么。看起来您正在尝试为对话框编写通用代码。“Toolkit”名称空间也提出了同样的建议。让这个工具箱实现一个基表单类,从而使它工作良好。现在,您可以在不使用任何代码或事件处理程序的情况下设计表单类:

public partial class Form1 : Toolkit.Dialogs.BaseDialog {
   // etc
}

假设Toolkit.Dialogs.BaseDialog是从覆盖OnFormClosing()的表单派生的类。也许它还应该有一个名为“ConfirmConclose”的bool类型的公共属性。这将启用“ExitConfig”逻辑。您可以在设计器中轻松设置该属性。

为什么不从Visual Studio生成的事件处理程序调用Toolkit.Dialogs.ExitConfirm,如下所示:private void Form1\u FormClosing(object sender,FormClosingEventArgs e){Toolkit.Dialogs.ExitConfirm(sender,e);}请检查Toolkit.Dialogs.ExitConfig方法和Formclose事件处理程序参数是否相同?方法参数是否相同。添加了一些图片,以更简洁的方式显示我想要的内容。我现在就是这样做的,但我只是想知道是否可以将其直接放入form designer事件页面,而不是生成一个事件来调用事件。有点达不到目的。我最终按照你的建议制作了一个模板表单,只是想知道是否可以通过设计师进行设置。我可能应该更好地表达我的问题,但这就是我想要的答案。最后,我做了一个我现在正在使用的模板表单。