VB.net 文本框值未更新为 Public 共享变量
VB.net Texbox Value not being updated to Public Shared Variable
我正在设置一个带有文本“Hello”和一个按钮的文本字段
当我更改文本并按下时,我希望有一个消息框回复更改后的文本
Public Class TestText
Dim Text As String = Textbox.text
Private Sub BtnchangeTXT_Click(sender As Object, e As EventArgs) Handles BtnchangeTXT.Click
Text = Textbox.Text
Msgbox(Text)
Msgbox(TextField.Fieldtext)
End Sub
End Class
Public Class TextField
Public Shared FieldText As String = TestText.Textbox.Text
End Class
一切正常,直到我请求“TextField.FieldText”msgBox,这将始终return默认文本(“你好”)
我哪里出错了?
我尝试设置不同的文本“On Load”,但默认的“Hello”仍在 returned。
这一行:
Public Shared FieldText As String = TestText.Textbox.Text
“FieldText”的值仅在创建该变量时设置一次(甚至在显示带有文本框的表单之前发生)。它不会在 TextBox 更改时更新。
如果您希望该变量始终具有该文本框的当前值,请使用该文本框的 TextChanged() 事件来更新该变量。
Private Sub Textbox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Textbox.TextChanged
TextField.Fieldtext = Textbox.Text
End Sub
您的代码有两个问题。首先,因为这段代码:
Public Class TextField
Public Shared FieldText As String = TestText.Textbox.Text
End Class
使用 TestText
class 的名称来指代 class 的实例,它指的是默认实例。如果您不知道默认实例是什么,我建议您阅读有关该主题的一些内容。你可以找到我自己的文章 here.
这意味着该代码将始终在该类型的默认实例上获得 TextBox
的 Text
。如果您显示默认实例,那很好,但如果您显式创建一个实例并显示它,然后修改该实例上 TextBox
的内容,这对默认实例的影响将完全为零。
第二个问题是您正在使用字段。您似乎认为 FieldText
字段应该随着您更改 TextBox
的内容而动态更改。你为什么那么想?每次获取字段值时,您拥有的代码都不会获取 TextBox
的当前内容。所做的是获取 TextBox
的当前内容,并在您第一次获取该字段时将其分配给该字段,然后再也不会更改该字段值。如果您真正想要的是 TextBox
的当前内容,那么您需要 属性 而不是字段:
Public Class TextField
Public Shared ReadOnly Property FieldText As String
Get
Return TestText.Textbox.Text
End Get
End Property
End Class
属性的全部意义在于它们在外部就像字段一样,所以您获取 属性 值的代码不会改变,但它们在内部就像方法一样,所以代码获取TextBox
的当前内容将在每次获取属性值时执行。
我正在设置一个带有文本“Hello”和一个按钮的文本字段 当我更改文本并按下时,我希望有一个消息框回复更改后的文本
Public Class TestText
Dim Text As String = Textbox.text
Private Sub BtnchangeTXT_Click(sender As Object, e As EventArgs) Handles BtnchangeTXT.Click
Text = Textbox.Text
Msgbox(Text)
Msgbox(TextField.Fieldtext)
End Sub
End Class
Public Class TextField
Public Shared FieldText As String = TestText.Textbox.Text
End Class
一切正常,直到我请求“TextField.FieldText”msgBox,这将始终return默认文本(“你好”)
我哪里出错了? 我尝试设置不同的文本“On Load”,但默认的“Hello”仍在 returned。
这一行:
Public Shared FieldText As String = TestText.Textbox.Text
“FieldText”的值仅在创建该变量时设置一次(甚至在显示带有文本框的表单之前发生)。它不会在 TextBox 更改时更新。
如果您希望该变量始终具有该文本框的当前值,请使用该文本框的 TextChanged() 事件来更新该变量。
Private Sub Textbox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Textbox.TextChanged
TextField.Fieldtext = Textbox.Text
End Sub
您的代码有两个问题。首先,因为这段代码:
Public Class TextField
Public Shared FieldText As String = TestText.Textbox.Text
End Class
使用 TestText
class 的名称来指代 class 的实例,它指的是默认实例。如果您不知道默认实例是什么,我建议您阅读有关该主题的一些内容。你可以找到我自己的文章 here.
这意味着该代码将始终在该类型的默认实例上获得 TextBox
的 Text
。如果您显示默认实例,那很好,但如果您显式创建一个实例并显示它,然后修改该实例上 TextBox
的内容,这对默认实例的影响将完全为零。
第二个问题是您正在使用字段。您似乎认为 FieldText
字段应该随着您更改 TextBox
的内容而动态更改。你为什么那么想?每次获取字段值时,您拥有的代码都不会获取 TextBox
的当前内容。所做的是获取 TextBox
的当前内容,并在您第一次获取该字段时将其分配给该字段,然后再也不会更改该字段值。如果您真正想要的是 TextBox
的当前内容,那么您需要 属性 而不是字段:
Public Class TextField
Public Shared ReadOnly Property FieldText As String
Get
Return TestText.Textbox.Text
End Get
End Property
End Class
属性的全部意义在于它们在外部就像字段一样,所以您获取 属性 值的代码不会改变,但它们在内部就像方法一样,所以代码获取TextBox
的当前内容将在每次获取属性值时执行。