父级上的UserControl事件实现

时间:2011-02-10 05:25:26

标签: c# delphi events user-controls delphi-7

enter image description here

我正在将Delphi 7.0应用程序转换为.Net(2.0)。

在Delphi应用程序中有类似的实现,如“User Control”,所以我在C#应用程序中也做了同样的事情。

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

我的问题是,

  1. 我们不能在.Net中做同样的事吗?
  2. 这样做的替代方法(直接)方法
  3. 注意:我通过委托/事件获得了我想要的东西,但我更喜欢在Delphi中完成它的方式

1 个答案:

答案 0 :(得分:1)

您可以通过以下两种方式实现此目标:

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

    private void Btn1_Click(object sender,EventArgs e) {             ((FormMain)this.TopLevelControl).Search(参数1); }

  3. 这种方法的问题是紧密耦合,形式和解决方法是注入一些接口来调用来自用户控件的函数。表单可以实现界面。可以通过某种IoC Container / DI框架将(接口)实例注入所有用户控件。