C# 表单设计器和名称空间
我经常使用的DLL中有一个静态事件-Toolkit.Dialogs.ExitConfirm 使用此事件的唯一方法是修改form.Designer.cs中添加事件的行。例如: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
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.ExitConfirmWinForms designer并不是为此而设计的。我有点惊讶,下次你改变设计时,它不会丢失你的活动 关于其他方法的一些想法,你可以让这项工作:
- 您可以创建一个表单类来为您钩住事件,并从该基类派生所有其他表单。然后你就会到处都有这种行为
- 您可以创建一个实用方法来钩住事件,并从每个表单的构造函数中调用它
- 您可以创建一个扩展方法来钩住事件,然后显示表单,并在显示表单的任何地方调用扩展方法(而不是调用
)show
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事件页面,而不是生成一个事件来调用事件。有点达不到目的。我最终按照你的建议制作了一个模板表单,只是想知道是否可以通过设计师进行设置。我可能应该更好地表达我的问题,但这就是我想要的答案。最后,我做了一个我现在正在使用的模板表单。