全局变量的值不会改变

时间:2011-12-22 19:35:14

标签: vb.net global-variables scope

我有一个变量,其范围需要是全局的,因为它需要在函数和按下按钮中调用。所以我在模块中声明了变量,因此它是全局的。

问题是此变量的值必须等于表单中文本框的text属性的值。

在这里,您可以下载我的问题的VB.net演示:http://db.tt/DDxQJDXl

以下是对发生的事情的解释

您在文本框中输入一个字符串,在这种情况下我输入了“Hello”。然后单击按钮,它会显示您所写的内容。

在该消息框中单击“确定”,然后更改文本框中的值。在这种情况下,我将其改为“再见”。然后我再次点击按钮,但变量没有改变值,消息框再次显示“Hello”。

以下是完整的源代码:

Module Module1
     Public strDataValue = frmTest.txtDataValue.Text
End Module
Public Class frmTest
    Private Sub btnTest_Click(sender As System.Object, e As System.EventArgs) Handles btnTest.Click
        MsgBox(strDataValue)
    End Sub
End Class

注意:这只是我在一个更大的程序中遇到的问题的演示,因此变量 必须是全局的。

4 个答案:

答案 0 :(得分:3)

当txtDataValue.Text更改时,strDataValue的值不会自动更改。您需要手动更新strDataValue,无论是文本框失去焦点,还是单击“测试”按钮。

答案 1 :(得分:3)

您需要将字段的值设置为TextBox

中的新值
Private Sub btnTest_Click(sender As System.Object, e As System.EventArgs) Handles btnTest.Click
    strDataValue = txtDataValue.Text
    MsgBox(strDataValue)
End Sub

该字段本身不会更改值。

答案 2 :(得分:2)

您还可以拥有一个公共属性,只要表单处于打开状态,它就会自动返回实际值。

Public ReadOnly Property DataValue() As String
    Get
        Return frmTest.txtDataValue.Text
    End Get
End Property

答案 3 :(得分:1)

您需要将txtDataValue.Text的值分配给变量strDataValue以获得更好的效果

不建议使用计时器对象或 TextChenged 事件

txtDataValue.Text的任何更改都可以在编辑操作结束后指定

为我提供最佳解决方案:LeaveLostFocus个事件

Private Sub txtDataValue_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtDataValue.Leave
       strDataValue = txtDataValue.Text
End Sub