我正在编写一个有两种形式的程序。一个表单让用户输入多个值,然后进行一些计算。然后它将该信息传递给另一种形式但是我无法弄清楚如何做到这一点。这是我的代码的相关部分。为了解决一些困惑,我试图传递11个值,也是最初,表单2未显示,然后当值从表单1传递到表单2时,表单1消失,表单2是唯一显示的
注意:这不是我的全部代码,我不相信我的所有代码都是必需的(我现在有1000行)但是这是包含我希望传递给其他表单的信息的代码。
很多人显然说这是另一个问题的重复,但是那个问题,他似乎已经知道如何传递变量,但只是有问题(甚至看着他,我无法弄明白)
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
'declarations
Dim intNormal As Integer
Dim intChildren As Integer
Dim intBonanza As Integer
Dim intDiamond As Integer
Dim intPictureFrame As Integer
Dim intKite As Integer
Dim intCrazyT As Integer
Dim intLetterX As Integer
Dim int2PostageStamp As Integer
Dim intPick7 As Integer
Dim intJackpot As Integer
Validate()
If txtNormal1.Enabled = False Then
intNormal = intNormInput
Else
intNormal = CalcNormalBooks()
End If
If txtChildren1.Enabled = False Then
intChildren = intChildInput
Else
intChildren = calcChildrensBooks()
End If
If txtBonanza1.Enabled = False Then
intBonanza = intBonInput
Else
intBonanza = calcBonanza()
End If
If txtSpecial1.Enabled = False Then
intSpecial = intSpeInput
Else
intSpecial = calcSpecialBooks(intSpecial)
End If
If txtDiamond1.Enabled = False Then
intDiamond = intDiaInput
Else
intDiamond = calcDiamond(intSpecial)
End If
If txtPictureFrame1.Enabled = False Then
intPictureFrame = intPicInput
Else
intPictureFrame = calcPictureFrame(intSpecial)
End If
If txtKite1.Enabled = False Then
intKite = intKiteInput
Else
intKite = calcKite(intSpecial)
End If
If txtCrazyT1.Enabled = False Then
intCrazyT = intCrazyInput
Else
intCrazyT = calcCrazyT(intSpecial)
End If
If txtLetterX1.Enabled = False Then
intLetterX = intLettInput
Else
intLetterX = calcLetterX(intSpecial)
End If
If txt2PostageStamp1.Enabled = False Then
int2PostageStamp = intPostInput
Else
int2PostageStamp = CalcPostageStamp(intSpecial)
End If
If txtPick71.Enabled = False Then
intPick7 = intPickInput
Else
intPick7 = calcPick7(intSpecial)
End If
If txtJackpot1.Enabled = False Then
intJackpot = intJackInput
Else
intJackpot = calcJackpot()
End If
End Sub
答案 0 :(得分:0)
由于我最近有几乎相同的要求,这是我的解决方案:
当您的第二张表格关闭时会触发的自定义事件
Public Event HotKeyFormClosed As EventHandler(Of HotKeyFormClosedEventArgs)
自定义EventArgs类,用于存储要传递给主窗体的值
Public Class HotKeyFormClosedEventArgs
Inherits EventArgs
'Your properties here
Public Sub New(...) 'your params here
MyBase.New()
'set your properties here
End Sub
End Class
在第二个Form处理FormClosed事件并将您的值传递给EventArgs
Private Sub HotKey_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs)
RaiseEvent HotKeyFormClosed(Me, New HotKeyFormClosedEventArgs(...)) 'your params here
End Sub
在主窗体上处理您的自定义事件(此处为HotKeyFormClosed)并提取其值
AddHandler frmHotKey.HotKeyFormClosed, AddressOf HotKey_FormClosed;
...
Private Sub HotKey_FormClosed(sender As Object, e As HotKeyFormClosedEventArgs)
'Do stuff with values from e
End If
我选择了Event方法,因为它将两种形式从另一种形式中分离出来。 人们可以轻松地复制两个表单上的信息,将它们公开并直接通过对象实例访问它。 但我更喜欢事件的可观察方法,因为它提供了灵活性(使用相同事件等的附加形式)。
P.S。:我在c#中写了我的代码,盲人在这里输入了VB代码,所以要亲切。
答案 1 :(得分:0)
方法期望接收的值/变量(在方法的签名中指定)称为参数。
调用方法时发送给方法的值称为Arguments。
只要调用方法时使用的参数与该方法的参数匹配,就可以传递这些值。
例如(我将尝试将其应用于您的上下文),如果您想创建一个采用特定值的表单实例,您可以在表单的New事件中指定这些参数,如下所示:
Public Sub New(someInt As Integer)
'do something with someInt here
End Sub
然后当你调用这个方法时,你会传递参数,如下所示:
Dim myInt As Integer = 10
Dim newForm As myForm = New myForm(myInt)
当我说参数需要匹配参数时,这意味着值的数量,这些值的顺序和值类型必须相同(或者在数字的情况下,参数的类型必须相同或者大于参数的类型)。
只要这是真的,那么你传递这些内容并不重要 - 你可以传递11个单独的参数,你只需要确保你将参数与参数匹配。
希望有所帮助!