(急)一个让小弟我头都大了的有关问题,求大家帮助,多谢

(急)一个让我头都大了的问题,求大家帮助,谢谢
本帖最后由 lghyf 于 2013-10-28 15:18:00 编辑
    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
        MsgBox("1")
        RichTextBox2.Text = "1"


    End Sub

    Private Sub RichTextBox2_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox2.TextChanged
        MsgBox("2")
        RichTextBox1.Text = "2"


    End Sub
为什么不能一直循环下去,执行了RichTextBox1.Text = "2"后,就不激活RichTextBox1的TextChanged了,如果我想它们一直循环执行下去,怎么办?

------解决方案--------------------
vb内部有避免产生此状况的机制。
------解决方案--------------------
TextChanged事件发生在值改变之后。赋值并非意味改变。
若RichTextBox1.Text <> "2"时,RichTextBox1.Text = "2"会引发RichTextBox1_TextChanged。
但下次就不会了。因为RichTextBox1.Text = "2"。
------解决方案--------------------
例如,初始两个文本框都是空。你向RichTextBox1随便输入个什么,比如“0”。
1.RichTextBox1_TextChanged引发。
2.执行RichTextBox2.Text = "1"前RichTextBox2.Text值为""
3.RichTextBox2.Text = "1"引发RichTextBox2_TextChanged
4.执行RichTextBox1.Text = "2"前RichTextBox1.Text值为"0"
5.RichTextBox1_TextChanged引发。
6.执行RichTextBox2.Text = "1"前RichTextBox2.Text值为"1"(第3步)
此时,由于RichTextBox2.Text = "1"不会引发值的改变,不会再引发RichTextBox1_TextChanged了。
如果你想写一个死循环。你可以:

Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
         MsgBox("1")
         IF RichTextBox2.Text = "1" Then
             RichTextBox2_TextChanged(RichTextBox2,null)
         Else
             RichTextBox2.Text = "1"
         End If
End Sub

Private Sub RichTextBox2_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox2.TextChanged
         MsgBox("2")
         IF RichTextBox1.Text = "2" Then
             RichTextBox1_TextChanged(RichTextBox2,null)
         Else
             RichTextBox1.Text = "2"
         End If
End IF
------解决方案--------------------
应该是    drowsihead 对的  

u012592437 你可以试一下  RichTextBox1.Text = RichTextBox1.Text + CStr(1)  也不会无限循环下去
------解决方案--------------------
刚才试验了一下RichTextBox确实无法循环引发事件。
不过这绝对不是“vb内部有避免产生此状况的机制”应该是RichTextBox特性。
因为换成TextBox,就会循环引发下去了。
------解决方案--------------------
比如这段代码:
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

        MsgBox("1")
        TextBox2.Text = TextBox2.Text + "!"
    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged

        MsgBox("2")
        TextBox1.Text = TextBox1.Text + "!"
    End Sub
------解决方案--------------------
抽了一点时间帮你写了一个新的RichTextBox控件。能完全满足你的需求。
Public Class UserRichTextBox
    Inherits RichTextBox
    Public Event UserTextChange()
    Dim re As Boolean = True



    Private Sub myBase_TextChange(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.TextChanged
        If re Then
            RaiseEvent UserTextChange()
        End If

    End Sub


    Public Overrides Property Text() As String