Значение глобальной переменной не изменится - PullRequest
2 голосов
/ 22 декабря 2011

У меня есть переменная, область которой должна быть глобальной, потому что она должна вызываться как в функции, так и при нажатии кнопки. Поэтому я объявил переменную в модуле, чтобы она была глобальной.

Проблема в том, что значение этой переменной должно быть равно значению свойства text текстового поля в форме.

Здесь вы можете скачать VB.net демонстрацию моей проблемы: http://db.tt/DDxQJDXl

Ниже приводится объяснение того, что происходит

Вы вводите строку в текстовое поле, в этом случае я ввел «Привет». Затем вы нажимаете кнопку, и она отображает то, что вы написали.

image

Вы нажимаете OK в этом окне сообщения и изменяете значение в текстовом поле. В этом случае я изменил его на «До свидания». Затем я снова нажал кнопку, но переменная не изменила значения, и в окне сообщения снова отображается «Hello».

image

Вот весь исходный код:

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 ]

3 голосов
/ 22 декабря 2011

Вам необходимо установить значение поля на новое значение в TextBox:

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

Поле не будет изменять значения само по себе.

3 голосов
/ 22 декабря 2011

Значение strDataValue не будет автоматически изменяться при изменении txtDataValue.Text.Вам необходимо обновить strDataValue вручную, когда текстовое поле теряет фокус или когда вы нажимаете кнопку «Тест».

2 голосов
/ 23 декабря 2011

Вы также можете иметь открытое свойство, которое автоматически возвращает фактическое значение, пока форма открыта.

Public ReadOnly Property DataValue() As String
    Get
        Return frmTest.txtDataValue.Text
    End Get
End Property
1 голос
/ 25 декабря 2011

Вам необходимо присвоить значение txtDataValue.Text вашей переменной strDataValue для лучшей производительности

Использование Таймера объекта или TextChenged событие не рекомендуется

Любое изменение txtDataValue.Text может назначить после завершения действия редактирования

для меня лучшее решение: Leave или LostFocus события

Private Sub txtDataValue_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtDataValue.Leave
       strDataValue = txtDataValue.Text
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...