C# 在构造函数期间设置事件处理程序
我看到一个问题 如果我理解正确的话。做这样的事是不可能的C# 在构造函数期间设置事件处理程序,c#,event-handling,initialization,C#,Event Handling,Initialization,我看到一个问题 如果我理解正确的话。做这样的事是不可能的 TableLayout tl = new TableLayout () { MouseClick += myMouseClickHandler } 但设置此处理程序的首选解决方案是什么 使新类继承自TableLayout并 …将对处理程序的引用添加到构造函数 …创建公共独立方法,如SetupSomeEventHandler(MouseEventHandler-meh) …或者可能存在更优雅的解决方案?如果您真的想在构造函数中设置
TableLayout tl = new TableLayout ()
{
MouseClick += myMouseClickHandler
}
但设置此处理程序的首选解决方案是什么
使新类继承自TableLayout
并
…将对处理程序的引用添加到构造函数
…创建公共独立方法,如SetupSomeEventHandler(MouseEventHandler-meh)
…或者可能存在更优雅的解决方案?如果您真的想在构造函数中设置它,您可以这样做 WPF版本
public class TableLayout
{
public TableLayout()
{
}
public TableLayout (Action<object, RoutedEventArgs> clickHandler)
{
MouseClick += clickHandler;
}
}
public class TableLayout
{
public TableLayout()
{
}
public TableLayout (Action<object, EventArgs> clickHandler)
{
MouseClick += clickHandler;
}
}
我假设您使用的是WinForms,如果我向您展示如何使用
表单
,您将能够将其应用到TableLayout
类中
以下是您需要做的:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public Form1(MouseEventHandler handler)
: this()
{
this.MouseClick += handler;
}
}
创建此表单时,我可以执行以下操作:
var form1 = new Form1((s, e) => { MessageBox.Show("You clicked me!"); })
在您的情况下,这将如下所示:
TableLayout tl = new TableLayout(myMouseClickHandler);
为什么要使用
Func clickHandler
?处理程序是操作,不返回值。此外,已经定义了相应的委托。您认为是否应该使用MouseEventHandler
&routedventhandler
?现在你的代码没有编译。请在发布前测试这两种解决方案。@Enigmativity试图帮助OP,可能这不能100%工作,因为你是对的,我没有编译它,但可以指导OP。我试图帮助他,而不是你。对不起。@Enigmativity顺便说一句,如果你试图帮助,你可以编辑我的问题或发布另一个答案。好的,我只是在构造函数之后添加处理程序。我希望在未来的标准中,C#可以像我一开始写的那样编译代码。
TableLayout tl = new TableLayout(myMouseClickHandler);