VB.NET通过一种方法处理多种形式

时间:2015-08-15 17:36:50

标签: vb.net winforms

NET

我觉得我正在构建太多类似的方法。但是,我不确定如何最小化类似方法的数量。

我为每个表单的事件实现了类似的方法。每种方法都执行几乎相同的任务,但每种方法处理不同形式的事件

例如,我有一个类来处理表单事件和两个表单。

Public Class Form1

    Dim IFL As New InterfaceLoader
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        IFL.Change_Label(Me)
    End Sub
End Class


Public Class Form2

    Dim IFL As New InterfaceLoader
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        IFL.Change_Label(Me)
    End Sub
End Class


Public Class InterfaceLoader

    Public Sub Change_Label(Nameofform As Form1)
        Nameofform.Label1.Text = "Hey This is Form !!"
    End Sub

    Public Sub Change_Label(Nameofform As Form2)
        Nameofform.Label1.Text = "Hey This is Form !!"
    End Sub
End Class

基本上,Interfaceloader类中的方法执行完全相同的任务。但是,它处理不同形式的标签。

我在思考"对象"类型参数可能有效,但它给出了错误

我不知道如何制作一个方法来处理多个表单事件。 :(

有没有办法让一个方法单独处理两个表单事件?

2 个答案:

答案 0 :(得分:0)

我认为您发布的内容只是一个示例,因此最佳解决方案将取决于您实际需要做什么。但是,更简单的方法是将标签传递给单个Change_Label方法。

Public Class Form1
    Dim IFL As New InterfaceLoader
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        IFL.Change_Label(me.Label1)
    End Sub
End Class

Public Class Form2
    Dim IFL As New InterfaceLoader
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        IFL.Change_Label(me.Label1)
    End Sub
End Class

Public Class InterfaceLoader
    Public Sub Change_Label(theLabel As Label)
        theLabel.Text = "Hey This is Form !!"
    End Sub
End Class

请注意,这是有效的,因为从Button.Click个事件传递的参数类型是相同的(即Label)。

如果你有几个具有相同特征的表单,另一种可能的方法是创建继承自MyForm的基类(让我们称之为Form)并包括所有这些共同特征。现在,您可以从MyForm而不是Form继承所有表单,并且您的InterfaceLoader类可以使用类型为MyForm的参数的方法。更好的是,InterfaceLoader中的方法可能是MyForm的方法。有关从Form继承的信息,您可以在MSDN上阅读Windows Forms Visual Inheritance

答案 1 :(得分:0)

您使用对按钮的Me.Label1事件处理程序内的另一个控件(Click)的引用。
在这种情况下,可用于所有表单和按钮的事件处理程序需要知道该标签控件 使用.Tag的{​​{1}}属性来引用Button

Label

然后在每个表单构造函数中将下一行添加到控制器的线处理程序

Public Class InterfaceLoader

    Public Shared Sub Button_ClickChangeLabel(sender as Object, e As EventArgs)
        Dim btn As Button = TryCast(sender, Button)
        If btn Is Nothing Then Exit Sub
        Dim mylabel As Label = TryCast(btn.Tag, Label)
        If mylabel Is Nothing Then Exit Sub
        mylabel.Text = "This is Form"
    End Sub

End Class

但是如果进程的逻辑可以保留在Form中,那么我没有看到你需要使用外部类的原因。 如果以不同的形式使用相同的行为,则为其创建基类