Похоже, вы указали Shared переменную вне класса здесь. Общие переменные используются только экземплярами классов. Например, если вы хотите, чтобы отслеживать, сколько экземпляров класса есть, вы бы объявить общую переменную в классе, как этот консольного приложения
Sub Main()
Dim t1 As New testclass
Dim t2 As New testclass
Console.WriteLine(t2.Count)
Console.ReadKey()
End Sub
Private Class testclass
Private Shared instanceCount As Integer
Public Sub New()
instanceCount += 1
End Sub
Public ReadOnly Property Count
Get
Return instanceCount
End Get
End Property
End Class
То, что вы в конечном итоге с является записывается на консоль , И общая переменная доступна только каждому экземпляру TestClass.
OK Статические переменные как локальные переменные, объявленные в процедуре. Однако с регулярными локальными переменными, когда процедура завершается, локальная переменная уничтожается. Статическая переменная продолжает существовать и сохраняет свое последнее значение. В следующий раз, когда вы вызываете ту же процедуру, статическая переменная не объявляется повторно и повторно инициализируется, поскольку она все еще существует и содержит последнее значение, которое вы ей назначили. Статическая переменная уничтожается только тогда, когда класс или модуль, в которых он был определен, уничтожается.
Так что ваш код должен быть, вероятно,
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
Static Dim craftability As String = "Craftable"
If CheckBox1.Checked = True Then
craftability = "Non-Craftable"
Else
craftability = "Craftable"
End If
Однако, глядя на код, установленный вами, если вы хотите craftability быть доступным всему классу, а затем просто объявить его, как вы уже сделали - Вне вспомогательных, но без общее ключевое слово. Не зная, как вы хотите craftability для использования, я не могу быть более точным. Я боюсь. Надеюсь, это поможет.
Установите контрольную точку в CheckBox1_CheckedChanged, чтобы увидеть, действительно ли назначаемая способность рисования была назначена. Кроме того, убедитесь, что объявлен только один экземпляр объявления. – xpda
Используйте имя класса для доступа к общим переменным. 'ClassWhereVariableDefined.craftability'. – Fabio
Вы уверены, что вы хотите объявить общую переменную, а не статическую переменную? –