来自usercontrol的vb.net winform调用父窗体上的函数

时间:2013-09-26 11:22:00

标签: vb.net winforms user-controls raiseevent

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

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

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

T.I.A。

[编辑] 我可以使用此处找到的this示例来解决我的问题。这工作正常

2 个答案:

答案 0 :(得分:0)

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

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

如果您无法找到表单向下推送数据(可能是因为它基于UserControl中的UI交互),您还有其他几种选择。第一种方法是将数据加载行为包装到可在初始化期间传递给UserControl的对象中,UserControl可以根据需要访问LoadData方法。另一种方法是让UserControl定义一组可用于从表单请求外部数据的事件。我喜欢在这些事件上使用“查询”前缀。因此,当在UserControl上点击获取按钮时,它会引发“QueryData”事件,并且处理该事件的表单通过填充某种类型的数据容器来响应,该数据容器是自定义{{1}的一部分}。

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


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

答案 1 :(得分: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