【问题标题】:Trigger richtextbox textchanged event until it detects certain text触发richtextbox textchanged 事件,直到它检测到某些文本
【发布时间】:2015-08-08 01:44:40
【问题描述】:

我正在研究可以发送和接收某些命令的串行端口。我想实现一个重试功能,它允许我(客户端)重新发送数据,直到设备(服务器)收到并向我发送响应。

因此,我创建了一个简单的代码来说明这种功能。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       RichTextBox1.AppendText(Environment.NewLine & "Sample")
    End Sub

    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
       Console.WriteLine("Trigger textchanged")

       Dim totalLines As Integer = Me.RichTextBox1.Lines.Length
       Dim lastLine As String = Me.RichTextBox1.Lines(totalLines - 1)

       Dim CSTAT_Check As Boolean = lastLine Like "*Sample*"
       If CSTAT_Check = True Then
           RichTextBox1.AppendText(Environment.NewLine & "Sample")
       End If
    End Sub
End Class

它的工作方式是这样的,我将单击按钮将sample 字符串附加到richtextbox 然后将触发richtextbox textchange_event 导致它重新发送sample 字符串到自身,并将导致它trigger另一个textchange_event等等,直到设备收到sample字符串,作为回报,设备(服务器)将发送sample_accepted字符串到我的设备(客户端)并且因为textchanged_event 没有检测到富文本框最后一行中的sample 字符串,它将不再向richtextbox 发送另一个sample 字符串。

这有点难理解,所以我将创建一个简单的图表

客户端(我)                               服务器(设备)

发送sample字符串             Doesn't detected

发送sample字符串again     Doesn't detected again

发送sample字符串again     Doesn't detected again

发送sample字符串again     Doesn't detected again

发送sample字符串again     Detected samplesend sample_accepted强>

客户端将no longer发送sample字符串,因为服务器已经检测到它。

我的代码中的问题是它似乎在第一次触发后没有再次触发textchanged_event

【问题讨论】:

  • 能否请您发布您正在进行的实际串行端口调用的接口?还有你用来调用串口的代码吗?这个富文本框示例妨碍了您获得好的答案。
  • @Enigmativity,当然。我会尝试以最简单的形式重新创建它。

标签: vb.net richtextbox textchanged


【解决方案1】:

???如果您在代码中更改了响应该属性更改的属性,则不会触发另一个更改的事件。???修改后需要手动触发 textchanged 事件。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       RichTextBox1.AppendText(Environment.NewLine & "Sample")
    End Sub

    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
       Console.WriteLine("Trigger textchanged")

       Dim totalLines As Integer = Me.RichTextBox1.Lines.Length
       Dim lastLine As String = Me.RichTextBox1.Lines(totalLines - 1)

       Dim CSTAT_Check As Boolean = lastLine Like "*Sample*"
       If CSTAT_Check = True Then
           RichTextBox1.AppendText(Environment.NewLine & "Sample")
           RichTextBox1_TextChanged(sender, New EventArgs())
       End If
    End Sub
End Class

【讨论】:

  • 添加2行代码后出现错误。 1. Error 2 'Public Event TextChanged(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event. 然后 2. Error 1 'Handled' is not a member of 'System.EventArgs'.
  • 对不起,这里是 c# 开发者。我有时会忘记,尽管有相似之处,但并非所有内容都在不同的 .Net 语言之间完全映射。我已经编辑了。
  • @CaryBondoc PS——我担心这只会导致无限循环。我不确定这是否适合处理客户端-服务器重试。
  • 这似乎很好。我会尝试将它应用到我的系统中。谢谢你的警告。 :)
  • 好的,非常感谢。我最终使用了另一种方式。 :)
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多