我在Dim
中公开声明了Form
,如何在函数中设置/更改此Dim
的值,而无需手动调用它:{{1} }?
我需要它是这样的:
Test = "New Val"
答案 0 :(得分:1)
使用System.Reflection.GetField (String, BindingFlags)按名称访问字段
以下是设置和获取字段值的一些功能:
Public Sub SetValue(name As String, value As Object)
Dim fi As FieldInfo = Me.GetType().GetField(name, BindingFlags.NonPublic Or BindingFlags.Instance)
fi.SetValue(Me, value)
End Sub
Public Function GetValue(name As String) As Object
Dim fi As FieldInfo = Me.GetType().GetField(name, BindingFlags.NonPublic Or BindingFlags.Instance)
Return fi.GetValue(Me)
End Function
注意:BindingFlags特定于您的应用程序,您已在其中声明了私有字段(Dim Test As ...
)。如果您想使用私人字段以外的其他内容,请参阅BindingFlags Enumeration。
在您的具体实现中,您可以在按钮单击中为该字段设置一个新字符串,如此
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
SetValue("Test1", "new value")
End Sub
演示其工作原理的最小完整示例可能如下所示
Dim f2 = New Form2()
Console.WriteLine(f2.GetValue("Test1"))
Console.WriteLine(f2.GetValue("Test2"))
f2.SetValue("Test1", "new value")
f2.SetValue("Test2", 1)
Console.WriteLine(f2.GetValue("Test1"))
Console.WriteLine(f2.GetValue("Test2"))
表格
Public Class Form2
Dim Test1 As String = "initial value"
Dim Test2 As Integer = 0
Public Sub SetValue(name As String, value As Object)
Dim fi As FieldInfo = Me.GetType().GetField(name, BindingFlags.NonPublic Or BindingFlags.Instance)
fi.SetValue(Me, value)
End Sub
Public Function GetValue(name As String) As Object
Dim fi As FieldInfo = Me.GetType().GetField(name, BindingFlags.NonPublic Or BindingFlags.Instance)
Return fi.GetValue(Me)
End Function
End Class
输出:
初始值
0 新的价值
1
另一个注意事项:设置字段时,您无法确定该类型。尝试f2.SetValue("Test2", "new value")
会编译,但在尝试将字符串转换为整数时会在运行时失败。如果您知道所有字段都是字符串,那么最好使用适当的强制转换来声明Public Sub SetValue(name As String, value As String)
和Public Function GetValue(name As String) As String
。
答案 1 :(得分:0)
如果您只想更改变量的值,请将您的功能更改为此。
Private Sub PassingDimName(ByRef DimName As String)
'Having it like this gives the following error:
'"Keyword does not name a type"
DimName = "Dims new value"
End Sub