2016-06-29 29 views
0

我正在做一个串行通信项目,并希望收到的字符串进入一个文本框,根据哪个按钮被点击发送初始字符串并调用响应。如何将接收到的序列文本放入多个文本框?

的ReceivedText的代码是:

PrivateSub ReceivedText(ByVal [text] As String) 

    Button1.Clear() 
    Button2.Clear() 

    If Button1.InvokeRequired Then 
     RichTextBox1.text = [text].Trim("!") 
    End If 

    If Button2.InvokeRequired Then 
     RichTextBox2.Text = [text].Trim("!") 
    End If 

EndSub 

这只是导致接收到的字符串进入的箱子,而不是一方或另一方的两个英寸

有没有什么办法让文本去适当的框?

+0

你的Clear方法应该做什么?这不是标准按钮类型的成员。尽管如此,如果您无法从响应文本中区分哪个按钮被按下,那么我至少会看到一些选项。最简单的是公共变量,它保存哪个按钮被点击。 – topshot

+0

但是,如果您可以同时按下两个按钮或在从先前的命令读取响应之前,那将不起作用。如果这是一个要求,那么你会开始每个按钮按下一个线程,并传递一个包含按钮名称和命令的类,如接受的答案在http://stackoverflow.com/questions/30162382/how-cani-i-创建一个新的线程地址的函数与参数在VB中,所以你可以读完它的名字。 – topshot

+0

@topshot我更正了Clear方法并将其放在适当的行中。我对此很新,对线程不熟悉,有没有可以提供的例子?我可以想象,根据点击哪个按钮,将接收到的字符串放入某个特定位置非常简单... –

回答

0

要记住的关键是.Net将所有串行通信视为线程。让我给你一个简单的例子来更新从我的程序中的一个从规模读取数据的文本框。

Private Sub ComScale_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles ComScale.DataReceived 

    If ComScale.IsOpen Then 
     Try 
      ' read entire string until .Newline 
      readScaleBuffer = ComScale.ReadLine() 

      'data to UI thread because you can't update the GUI here 
      Me.BeginInvoke(New EventHandler(AddressOf DoScaleUpdate)) 

     Catch ex As Exception : err(ex.ToString) 

     End Try 
    End If 
End Sub 

你会注意到一个例行DoScaleUpdate调用它执行GUI的东西:

Public Sub DoScaleUpdate(ByVal sender As Object, ByVal e As System.EventArgs) 
    Try 
     'getAveryWgt just parses what was read into something like this {"20.90", "LB", "GROSS"} 
     Dim rst() As String = getAveryWgt(readScaleBuffer) 
     txtWgt.Text = rst(0) 
     txtUom.Text = rst(1) 
     txttype.Text = rst(2) 
    Catch ex As Exception : err(ex.ToString) 

    End Try 
End Sub 

你可以把它如果你选择要复杂得多(见this thread岗位#15为例)但这应该足以满足您的需求。

相关问题