你的 sub过程这个是子过程,无返回值的,这里Form1_Load中b仍然 b=""
创新互联从2013年创立,是专业互联网技术服务公司,拥有项目网站设计制作、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元泽普做网站,已为上家服务,为泽普各地企业和个人服务,联系电话:028-86922220
如果你想b="注释",将你的sub过程改成自定义函数,用b来接收返回值就行了,代码如下
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim a As String = "rem"
Dim b As String = ""
b = sub过程(b, a)
Me.Text = b '为什么“b”不是等于 "注释"
End Sub
Private Function sub过程(ByVal 输出 As String, ByRef 输入 As String) As String
If 输入 = "rem" Then
输出 = "注释"
End If
Return 输出
End Function
用鼠标移动到右上方的 “解决方案资源管理器”的“视图设计器”图标(见下图),可以看到系统会显示“视图设计器”文字,单击就可能出现窗体:
如果用鼠标单击该图标左边的“查看代码”按钮,就进入代码窗口;
先设计好Form1和Form2。在
Private Class Form2中输入
Public Event ChangeValue(ByVal value As String) '是string还是其它的看你需要了
在Form2的Closed事件:
Private Sub Form2_Closed() Handles Me.Closed
RaiseEvent ChangeValue(TextBox1.Text)'如果是数值类型的话用下面这个:
'RaiseEvent ChangeValue(Val(TextBox1.Text))
End Sub
在Form中定义x:
Dim x As String '是String还是数值类型看你需要了,要和上面的统一
在Form1中写一个处理值的函数。值哪来?别管它
Private Sub ProcessValue(ByVal value As String) '记得统一
x = value
End Sub
在Form1中Button1的Click事件中:
Private Sub Button1_Click() Handles Button1.Click
Dim f2 As New Form2
AddHandler f2.ChangeValue,AddressOf ProcessValue
f2.Show()
End Sub
楼下的更简单啦
C返回局部变量的值也没问题啊
只是如果这个局部变量是指向栈上的内存的指针,由于函数结束后活动栈被清空,会导致指针失效。
VB.NET不支持指针语法,它不可能返回指向栈上的指针,所以用不着担心这个问题。
你的理解
第一点理解是正确的,不过和这个问题关系不大。因为引用类型本来就不是分配在栈上的,它当然就不受函数的影响。
第二点,那个只是个语法问题。VB6没有Return语句,所以它必然有另外一种语法来表明函数的返回值。这个和函数能否返回正确的对象没有关系,就是一种表明函数返回值的语法。
编译器确实定义了一个和函数同名的变量,那个变量就是一个普通的局部变量,作用域就在函数的局部域里。这个变量没什么特别的,就是编译器会在函数结束时把这个变量的值作为函数的返回值返回而已。