我不知道如何正确,但我有一个vb.net winform应用程序,我想在其中使用自定义控件,以便我可以在多个表单上重用逻辑。我知道如何在父控件中设置此控件中的值(使用控件中的属性)。但是现在我想在父窗体上调用一个specificiek函数。我的情况是LoadData(),它是父窗体的一个过程。我怎么能这样做?
我知道我可以通过在usercontrol中使用Me.ParentForm来引用父表单。但我不能在父窗体中调用LoadData()过程。
有任何帮助吗?这是一个winforms应用程序,而不是ASP.NET应用程序。
T.I.A。
[编辑] 我可以使用此处找到的this示例来解决我的问题。这工作正常
答案 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