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类中的方法执行完全相同的任务。但是,它处理不同形式的标签。
我在思考"对象"类型参数可能有效,但它给出了错误
我不知道如何制作一个方法来处理多个表单事件。 :(
有没有办法让一个方法单独处理两个表单事件?
答案 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中,那么我没有看到你需要使用外部类的原因。
如果以不同的形式使用相同的行为,则为其创建基类