我被告知有两种方法可以解决这个问题,一个公共布尔值,或者在运行时添加和删除事件处理程序。我开始发现更多此类问题的案例。解决这些问题的最佳做法是什么?
公共布尔值似乎是一个简单但混乱的解决方案,因为我最终会得到几个与是否应该运行不同子例程的公共布尔值。添加和删除处理程序看起来更干净,但感觉我要求编译器做很多工作。
答案 0 :(得分:3)
您可以在事件处理程序中使用静态布尔值。这是一个使用TextBox.TextChanged事件处理程序的简短示例。
Private Sub TextBox1_TextChanged(sender As Object, _
e As EventArgs) Handles TextBox1.TextChanged
Debug.WriteLine("1")
Static reentrant As Boolean = False
If Not reentrant Then
Debug.WriteLine("2")
reentrant = True
TextBox1.Text = TextBox1.Text.ToUpper
reentrant = False
Else
Debug.WriteLine("3")
End If
Debug.WriteLine("4")
End Sub
答案 1 :(得分:2)
另一种选择是仅在需要更改时更改文本(仅在分配文本属性时引发事件)。 这将产生2次例程,就像其他例程一样,但没有与布尔值相同的额外出现。
Private Sub TextBox1_TextChanged(sender As Object, _
e As EventArgs) Handles TextBox1.TextChanged
if not TextBox1.Text = TextBox1.Text.ToUpper then
TextBox1.Text = TextBox1.Text.ToUpper
End If
End Sub