0

我不知道如何正确,但我有一个 vb.net winform 应用程序,我想在其中使用自定义控件,以便我可以在多个表单上重用逻辑。我知道如何从父级设置此控件中的值(使用控件中的属性)。但现在我想在父表单上调用一个特定的函数。我的情况是 LoadData(),它是父表单的一个过程。我怎样才能做到这一点?

我知道我可以通过在用户控件中使用 Me.ParentForm 来引用父表单。但是我不能在父窗体中调用 LoadData() 过程。

有什么帮助吗?这是一个 winforms 应用程序,而不是一个 ASP.NET 应用程序。

TIA

[编辑] 我可以使用这里找到的这个例子来解决我的问题。这工作正常

4

2 回答 2

0

首先, aUserControl用于重用GUI逻辑,所以我希望这就是您的意思。如果您尝试重用非 GUI 逻辑,您可能需要为此创建一些独立的类。

其次,以您描述的方式回调父表单通常是糟糕的设计,因为它使UserControl可重用性降低,并且在两者之间创建了过于紧密的绑定。如果可能的话,您应该将数据向下推入UserControl

如果您无法找到让表单下推数据的方法(可能是因为它基于 中的 UI 交互UserControl),那么您还有其他几个选择。第一个是将数据加载行为包装到一个对象中,该对象可以UserControl在初始化期间传递给,并且UserControl可以根据需要访问其LoadData上的方法。另一种方法是让 UserControl 定义一组可用于从表单请求外部数据的事件。我喜欢在这类事件上使用“查询”前缀。因此,当您点击获取按钮时UserControlEventArgs.

如果您需要更多帮助,可以扩展其中任何一个。


重新阅读这个问题后,我看起来可能是我的方法过度杀戮。我的印象是LoadDataForm 中的一个方法将数据加载到 UserControl 中。如果这只是一个简单的调用,那么专注于我的答案的事件部分并忽略数据容器部分。

于 2013-09-26T11:55:59.507 回答
0

我会向您的控件添加一个事件,并在控件所属的表单上处理它。

在您的控制下,放置如下内容:

Public Event LoadData(ByVal sender As Object, ByVal e As System.EventArgs)

在你的表格中,你可以有这样的东西:

Private Sub UserControl1_LoadData(sender As Object, e As EventArgs) Handles UserControl1.LoadData
    '...Your code here
End Sub
于 2013-09-26T16:48:08.660 回答