【问题标题】:UserControl event implementation on parent父级上的 UserControl 事件实现
【发布时间】:2011-02-10 05:25:26
【问题描述】:

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

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

但在 Delphi 中,可以在 main(parent) 上编写 UserControl 的事件实现,而在 .Net 中不太可能在 UserControl 级别执行此操作。

我的问题是,

  1. 我们不能在 .Net 中做同样的事情吗?
  2. 替代方法(直接)方法

注意:我已经通过委托/事件实现了我想要的,但我更喜欢在 Delphi 中完成它的方式

【问题讨论】:

  • 你能展示一些Delphi代码吗?自从我在 Delphi 中编程以来已经有一段时间了,但我不记得无法做到你所说的。事件的实现属于该类而不属于其他某个类。因此,如果您向我们展示一些 Delphi 代码并解释您正在尝试做什么,那么向您展示在 .NET 中应该如何做会更容易
  • 我想知道我如何显示代码... Buecase 这与编码无关,它与编码方式有关...简单地说就是...如何实现事件(功能)控制用户控件,在它所在的表单上(父)?
  • 是的,您可以在 .net 中执行此操作。在用户控件中创建一个委托/事件并在主窗体中注册该事件。
  • @santosh - 请看我的笔记。

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


【解决方案1】:

您可以通过几种替代方法来实现此目的:

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

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

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

【讨论】:

  • 是的,我所做的就是你的第二个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 2022-10-23
相关资源
最近更新 更多