C# 父级上的UserControl事件实现

C# 父级上的UserControl事件实现,c#,delphi,events,user-controls,delphi-7,C#,Delphi,Events,User Controls,Delphi 7,我正在将Delphi7.0应用程序转换为.Net(2.0) 在Delphi应用程序中也有类似的实现,比如“用户控件”,所以我在C#应用程序中也做了同样的实现 但在Delphi中,可以在main(父级)上编写UserControl的事件实现代码,而在.Net中,不太可能必须(不确定)在UserControl级别执行 我的问题是, 我们不能在.Net中也这样做吗 替代方法(直接)做那件事的方法 注意:我已经通过委托/活动实现了我想要的目标,但我更喜欢在Delphi中实现这一目标的方式。您可以使用两种

我正在将Delphi7.0应用程序转换为.Net(2.0)

在Delphi应用程序中也有类似的实现,比如“用户控件”,所以我在C#应用程序中也做了同样的实现

但在Delphi中,可以在main(父级)上编写UserControl的事件实现代码,而在.Net中,不太可能必须(不确定)在UserControl级别执行

我的问题是,

  • 我们不能在.Net中也这样做吗
  • 替代方法(直接)做那件事的方法

  • 注意:我已经通过委托/活动实现了我想要的目标,但我更喜欢在Delphi中实现这一目标的方式。您可以使用两种替代方法来实现这一目标:

  • 将用户控件中的控件成员(由设计器生成)设置为公共或内部(可以通过在控件属性中设置Modifiers属性)。然后,您可以编写代码,例如
    UserCtr1.UserCtr2.UserCtrl3.Btn1
    ,以引用按钮并在表单代码中将事件处理程序附加到它。我不喜欢这种方法,因为它破坏了封装。但如果您认为用户控件只是一个UI模板(不包含任何行为),那么它可能适合您
  • 另一种方法是在控制代码中包含本地事件处理程序,但让它们从表单中调用相应的方法。这可以通过使用
    TopLevelControl
    属性来实现。例如,在用户Ctrl 3代码中

    私有无效Btn1_单击(对象发送方,事件参数e) { ((FormMain)this.TopLevelControl).Search(param1); }


  • 这种方法的问题是与表单紧密耦合,解决的方法是注入一些接口来从用户控件调用函数。表单可以实现接口。(接口的)实例可以通过某种IoC容器/DI框架注入到所有用户控件中。

    您可以通过几种替代方法来实现这一点:

  • 将用户控件中的控件成员(由设计器生成)设置为公共或内部(可以通过在控件属性中设置Modifiers属性)。然后,您可以编写代码,例如
    UserCtr1.UserCtr2.UserCtrl3.Btn1
    ,以引用按钮并在表单代码中将事件处理程序附加到它。我不喜欢这种方法,因为它破坏了封装。但如果您认为用户控件只是一个UI模板(不包含任何行为),那么它可能适合您
  • 另一种方法是在控制代码中包含本地事件处理程序,但让它们从表单中调用相应的方法。这可以通过使用
    TopLevelControl
    属性来实现。例如,在用户Ctrl 3代码中

    私有无效Btn1_单击(对象发送方,事件参数e) { ((FormMain)this.TopLevelControl).Search(param1); }


  • 这种方法的问题是与表单紧密耦合,解决的方法是注入一些接口来从用户控件调用函数。表单可以实现接口。(界面的)实例可以通过某种IoC容器/DI框架注入到所有用户控件。

    您能展示一些Delphi代码吗?我已经有一段时间没有用Delphi编程了,但我不记得我能做到你所说的。事件的实现属于类而不属于其他类。所以,如果你向我们展示一些Delphi代码,并解释你想做什么,那么你就可以更容易地展示你应该如何使用它。。。因为它不是关于编码,而是关于编码方式。。。。简单地说就是。。。如何在UserControll的窗体(父窗体)上为控件实现事件(FUNCTION)?是的,您可以在.net中实现。在UserControll中创建一个委托/事件,并在主窗体中注册该事件。@santosh-请参阅我的说明。您能显示一些Delphi代码吗?我已经有一段时间没有用Delphi编程了,但我不记得我能做到你所说的。事件的实现属于类而不属于其他类。所以,如果你向我们展示一些Delphi代码,并解释你想做什么,那么你就可以更容易地展示你应该如何使用它。。。因为它不是关于编码,而是关于编码方式。。。。简单地说就是。。。如何在usercontrol上,在它所驻留的窗体(父窗体)上为控件实现事件(功能)?是的,你可以在.net中实现。在usercontrol中创建一个委托/事件,并在主窗体中注册该事件。@santosh-请看我的笔记。是的,我做的是你的2个。是的,我做的是你的2个。