读书人

求教很简单的一个有关问题小弟我是

发布时间: 2013-11-04 16:56:03 作者: rapoo

求教,很简单的一个问题,我是初学的。
Public Class Form1

Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
MsgBox("1")
RichTextBox2.Text = Rnd() * 1000

End Sub


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

End Sub
End Class
为什么不能一直循环下去,如果我想它们一直循环执行下去,怎么办?
[解决办法]
Public Class Form1
Private rnd As New Random()
Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
MsgBox("1")
RichTextBox2.Text = rnd.Next(0, 1000)

End Sub


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

End Sub
End Class
[解决办法]
你的代码的问题是,连续调用rnd返回的随机数一样,所以不再触发新的Changed
[解决办法]
每次取随机数前,都初始化一下种子
[解决办法]
每次 new 一下 不行么
[解决办法]

引用:
为什么不能一直循环下去,如果我想它们一直循环执行下去,怎么办?


如果主线程被你“卡死”,它根本没有时间去显示。
[解决办法]
引用:
Quote: 引用:

为什么不能一直循环下去,如果我想它们一直循环执行下去,怎么办?


如果主线程被你“卡死”,它根本没有时间去显示。


也对 假设其 循环了 那在界面上也是看不到的
[解决办法]
要不 doeven 一下 看看 是不是呢
[解决办法]
http://bbs.csdn.net/topics/390626276是不是你问的问题呢.
我测试了一下RichTextBox貌似是从内部避免了循环的Change事件的引发,因为你换成Textbox就可以得到你想要的结果。因此,如果你想要有一致的Change事件的引发机制,不如重写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
Get
Return MyBase.Text
End Get
Set(ByVal value As String)
If MyBase.Text <> value Then
re = False
MyBase.Text = value
re = True
RaiseEvent UserTextChange()
End If
End Set
End Property
End Class

=====================================

你把上述代码粘贴到一个新建的类中,编译一下,你会在工具箱中看到UserRichTextBox
使用上面的UserRichTextBox代替系统的RichTextBox
使用UserTextChange事件代替系统的TextChange事件即可。
下面代码能陷入无限循环
Private Sub UserRichTextBox1_UserTextChange() Handles UserRichTextBox1.UserTextChange


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

Private Sub UserRichTextBox2_UserTextChange() Handles UserRichTextBox2.UserTextChange
MsgBox("2")
UserRichTextBox1.Text = UserRichTextBox1.Text + "!"
End Sub

我已经测试通过。
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

为什么不能一直循环下去,如果我想它们一直循环执行下去,怎么办?


如果主线程被你“卡死”,它根本没有时间去显示。


也对 假设其 循环了 那在界面上也是看不到的


因为有 MsgBox,循环后依然能够看到。你需要逐一点击消息框。你们可以测试一下(用我上面重写的RichTextBox组件或者TextBox)。

读书人网 >VB Dotnet

热点推荐