Vb.net 输出方法中定义的多个变量
我对表单加载事件触发的表单进行了一系列基本计算:Vb.net 输出方法中定义的多个变量,vb.net,winforms,visual-studio,variables,methods,Vb.net,Winforms,Visual Studio,Variables,Methods,我对表单加载事件触发的表单进行了一系列基本计算: Dim someVariableA As Integer Dim someVariableB As Integer Dim someVariableX As Integer = 1 Dim someVariableY As Integer = 2 someVariableA = someVariableX + someVariableY someVariableB = someVariableX * someVariableY 我现在需要一
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的include函数。您遇到的问题是。声明变量的位置决定其可用性。您可能知道如何使变量对表单中的所有方法可见:
Public Class Form1
Private varA As String
Private var2 As Integer
这些将对表单中的所有方法都可用,因为在表单级别声明了(不同于仅在本地存在的过程中声明的变量(Dim
)。要使它们对应用程序窗体中的所有方法可见,请在模块中声明它们:
Public Module1
Friend varA As String
Friend var2 As Integer
Friend varX As DateTime
在模块中声明(1980年代风格!),它们将成为应用程序的全局变量。但是有很好的理由避免这种情况。更改一个值是如此容易,您可以有一些方法意外地或无意地这样做-记住,它们现在对任何事物都可见,即使是那些可能没有理由更改它们的过程!然后,您将花费时间尝试查找那些正在更改值但不应更改的方法
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)
是的,您可以这样做,将模块添加到您的项目中并在其中定义函数,然后您可以将该函数称为YourModule.someFunction,希望它对您有所帮助是的,这是OOP的基础,所有处理/函数都应该放在一个类中,所有窗体都可以访问的地方。@HadiHassan我已经按照您的说明进行了操作,但是我的变量仍然被标记为未声明。我调用了
someModule.someFunction()
,但是当我试图输出函数中定义的变量时:TextBox1.Text=someVariableA
。。。有人告诉我,someVariableA
是未声明的。@Nadeem_MK为解释喝彩,但是函数中的变量即使在我调用该方法后也没有声明。或者你可以将这些变量封装在一个类中,让我们用4个属性a、B调用它的结果,然后函数将返回结果,您可以将其作为结果访问。A或结果。B,如果您不想完全理解,我可以制作一个示例代码,但方法中的操作可能会返回一个值(使其成为函数),但也会更改一些其他变量值。因此,如果myFoo.someFunc()那么tbSomething.Text=myFoo.Name,那么您可能需要,其中“Name”是您定义的用于公开某些值的属性之一。此操作有效。谢谢你的有力回答和教育。我没有意识到模块方法被认为是如此过时。谢谢。同样油腻的是通过ByRef…这使得很难一眼就知道param可能会改变。只需做同样的事情-更改绑定到道具的变量并获取这些值。从主窗体创建类的实例:
,这是否意味着仅使用我的主窗体(即显示的第一个窗体)或者它是指我希望在其上使用该类的任何形式吗?请注意,myFoo
是在模块中声明的,这使它对所有人都可见。主窗体只是创建实例