我对表单加载事件触发的表单进行了一系列基本计算:
Dim someVariableA As Integer
Dim someVariableB As Integer
Dim someVariableX As Integer = 1
Dim someVariableY As Integer = 2
someVariableA = someVariableX + someVariableY
someVariableB = someVariableX * someVariableY
我现在要求对单独表格进行精确计算。我可以用一种方法将计算放在两种形式都可以调用的方法中,而不是再次粘贴它吗?
Public Function someFunction()
' Above calculations placed here instead.
End Function
Private Sub someSub()
' Call calculations.
someFunction()
' ...now output and use variables from function.
TextBox1.Text = someVariableA
TextBox2.Text = someVariableB
End Sub
最终,我期待像PHP一样的功能包括功能。
答案 0 :(得分:1)
您遇到了Scope的问题。声明变量的位置决定了它的可用性。您可能知道如何使变量对表单中的所有方法都可见:
Public Class Form1
Private varA As String
Private var2 As Integer
这些将在表单中的所有方法中可用,因为它们在Form级别声明(与在本地仅存在的过程内声明的变量(Dim
)不同)。要使它们对应用程序表单中的所有方法可见,请在模块中声明它们:
Public Module1
Friend varA As String
Friend var2 As Integer
Friend varX As DateTime
在模块(20世纪80年代风格!)中声明,它们成为您应用的全局变量。但是有充分理由避免这种情况。改变一个值是如此容易,你可以有意外或无意中这样做的方法 - 记住它们现在对一切都是可见的,即使那些可能没有充分理由改变它们的程序!然后,您花时间尝试找到那些正在改变价值但不应该改变价值的方法。
OOP的一个巨大好处是能够通过使用类来保存数据和包含管理数据的方法来避免这种情况 - 它们可以执行从加载和保存到您需要的计算的所有操作。这可能是您需要的标志是您有一些变量想要成为全局并且已经有方法是全局,将它们组合在一起并且您有一个类:
Public Class Foo
Private varA As String
Private var2 As Integer
' some of these things might be better as Properties
' this allows the subscribers (users of the class) to change the
' values directly:
Public Property SomeDate As DateTime
Public Property Name As String
Public Property Value As Integer
Public Function GetSomething(aVar As Integer) As Integer
var2 += aVar ' update var2 for example
Return var2 ' return new value
End Function
使课程适用于所有表格:
Public Module1
Friend myFoo As Foo ' makes it visible to all forms
然后从主窗体创建一个类的实例:
Public Class Form1
Private Sub Form_Load(....
myFoo = new Foo
现在,myFoo
是Foo
类的一个实例,它不仅包含这些变量,还包含管理它们的方法:
Private Sub button_click(....
someVar = myFoo.DoSomething(42)