我在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'不是有效的标识符。
有没有办法允许表单设计器引用其他类/命名空间中的事件?
编辑:有些人使用视觉提示更好地工作,所以这里有一些图像来定义问题:http://imgur.com/a/RaLMg
第一张图显示了我必须如何使它在Visual Studio中运行 - 一个调用事件的事件。
第二张图片展示了我实际上要做的事情。
第三个图像是我手动输入方法名称时发生的错误。
答案 0 :(得分:1)
我在DLL中有一个静态事件
你没有,你只有一个方法。 FormClosing是事件,如果它具有正确的签名,则您的方法可以是事件处理程序方法。设计师根本不支持您尝试做的事情,您将不得不停止尝试。有两种理智的解决方案,都涉及在表单类中编写代码。首先,您可以在构造函数中执行此操作:
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是一个派生自Form的类,它重写了OnFormClosing()。也许它还应该有一个名为“ConfirmOnClose”的bool类型的公共属性。它启用“ExitConfirm”逻辑。您可以毫无困难地在设计器中设置那个属性。
答案 1 :(得分:0)
您可以调用此方法'Toolkit.Dialogs.ExitConfirm'在申请表的表单结束事件上,并将所需的参数传递给Toolkit.Dialogs.ExitConfirm
答案 2 :(得分:0)
WinForms设计器并不是为此而设计的。我有点意外,下次你在设计师做出改变时不会丢失你的活动。
关于其他方法可以做到这一点的一些想法:
Show
)。基类可能是最简单的解决方案,只要您尚未将表单继承用于其他目的。