在我的vb.net应用程序中应该在哪里编写类似控制器的代码?

时间:2013-11-19 15:08:39

标签: vb.net

我正在重构一个大文件的现有项目。所有表单控件都以单一形式存在,所有事件处理程序都以后面的代码形式存在。

我正在将一部分UI重构为用户控件。此用户界面的一部分是“添加合同”'按钮。这将转到我的数据层,向DataTable添加一行,并使用新行更新表单其他部分中的各种网格。

我的问题是,我应该在用户控件中将按钮单击的事件处理程序放在哪里?

  1. 我可以将事件处理程序代码留在父表单中,并使用用户控件中的AddHandler来引用父表单的子

  2. 我可以在用户控件中编写所有事件处理程序代码。在这种情况下,我需要访问父表单以获取对数据层的引用。

  3. 我来自网络背景,我已经习惯了'控制器'处理这类事情。我想我的父母形式正在变成一种控制者 - 但这是一个好习惯吗?我是否应该有一个单独的类来协调用户与模型层的交互,或者,一旦我将所有UI分离到单独的用户控件中,主窗体是否会成为这类事物的好地方?

1 个答案:

答案 0 :(得分:1)

您的用户控件应引发托管用户控件的表单将处理的事件。如果用户控件具有对表单的引用,则用户控件在任何其他上下文中都不可重用;换句话说,如果用户控件试图使用用户控件,那么用户控件就会与那个表单紧密耦合,并且X会破坏。

注意:如果您的表单是唯一使用用户控件的表单,那么将其作为用户控件就没有太多的可重用性。如果只有一个所述接口的实现,那么与它类似的类型对于创建接口并没有多大用处。从组织的角度来看,用户控件可以用来清理拥挤的表格。它还具有允许在用户控件中动态加载内容的好处。

您的父表单成为控制器没有任何问题。


以下是一个快速示例(在这种情况下,单击用户控件中的按钮),了解如何从用户控件引发事件并订阅表单中的事件:

Public Class UserControlClass
    ' Define event that will be raised by user control to anyone interested in handling the event
    Public Event UC_Button1Click()

    ' Mechanism to allow event to be raised by user control
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RaiseEvent UC_Button1Click()
    End Sub
End Class

现在在表单类中,您需要为用户控件引发的事件添加处理程序,如下所示:

AddHandler userControl1.UC_Button1Click, AddressOf Button1_Click

最后,您将创建AddressOf语法中引用的方法,如下所示:

Public Sub Button1_Click(ByVal sender As Object, ByVal args As EventArgs)
    ' Do something here
End Sub