【发布时间】:2009-10-01 10:17:54
【问题描述】:
情况:C#、.NET 3.5、WinForms
目标:Form1 有一个可以通过构造函数启用的 Button。 IE。只有当我调用 new Form1(true) 时才会显示该按钮。
我们希望能够通过一些参数从 Form2 向 Form1 传递一个方法(不必在 Form1 的构造函数上),并且当 Form1.Button1 被按下时,Form2.<SomeMethod> 应该被执行。
我们知道我们可以在 Form1 中创建一个委托/事件,然后在 Form2 中执行以下操作:
Form1.SomeDelegate += new ..... (MyMethodInForm2);
...然后在 Form1_ButtonClick 中我们触发事件,该事件反过来会在 Form2 中发挥作用。
但我们想知道是否有更优雅/新/现代的版本(匿名方法?Lambda 表达式?等等)来完成这个。
这个想法是“任何”表单都可以实例化一个 Form1 类并传递它自己的方法以在单击 Form1 的按钮时执行;但不是对调用者的回调(form2,3,..n),Form1 执行传递的函数(它可能驻留在调用者内部)。我们现在真的不需要这些函数有参数。
注意:代码示例包含简单的变量/对象名称,并非取自现实生活,请忽略简单性。
更新抱歉没有更具体,我认为我会继续使用委托/事件模型,但作为参考,我认为以下是对情况的更好描述:
Form1 是一个通用表单,它接受项目列表并显示它们。我们可以传递员工类型或人员类型或任何“T”。它工作正常。 我们收到一个客户的要求,询问是否可以在那个小 Form1 上添加一个可选按钮,如果单击该按钮,它将打开另一个表单/执行某些方法。
这样,如果我使用 Form1,我可以在运行时告诉按钮打开 EmployeeForm,而如果我使用 Form1,同一个按钮可以打开表单 PersonForm。现在打开一个表单并不是我们对该按钮的唯一用途,但这是调用者的问题。
现在,我所做的就是我们所说的:在 Form1 上委托/事件,在“调用”表单上,我们执行 Form1.theEvent += 的东西,以订阅事件。我只是想知道是否有更好的方法来实现这一点,因为这就是我们在 .NET 2.0 中的做法,而我们刚刚开始使用 .NET 3.5。
【问题讨论】:
-
我想我还想让它对“API”更友好,而不仅仅是让 API 用户知道他必须订阅 XX 事件……