2016-06-29 30 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爲例)但這應該足以滿足您的需求。

相關問題