最佳实践AddHandler& RemoveHandler或Public布尔变量

时间:2013-05-10 14:20:47

标签: c# .net vb.net

几个月前我问过question这个问题。我有一个子程序,其中一个selectedindexchanged处理程序调用自己,因为它正在更改控件的选定索引。

我被告知有两种方法可以解决这个问题,一个公共布尔值,或者在运行时添加和删除事件处理程序。我开始发现更多此类问题的案例。解决这些问题的最佳做法是什么?

公共布尔值似乎是一个简单但混乱的解决方案,因为我最终会得到几个与是否应该运行不同子例程的公共布尔值。添加和删​​除处理程序看起来更干净,但感觉我要求编译器做很多工作。

2 个答案:

答案 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