2012-01-19 41 views
1

嘿,我想知道为什么我的第二种形式不显示我在第一种形式中收到的价值。第二种形式在调用时没有显示以第一种形式存储的值

第一种形式的代码是:

Private Sub scannerOnCom_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) 
    responceBack = scannerOnCom.ReadLine 
    Call frm1110.clickButton(responceBack) 
End Sub 

第二种形式的代码是这样的:

Public Sub clickButton(ByRef theResponse As String) 
    txtNumber.Text = theResponse 
    'Call cmdNextFinish_Click(Nothing, Nothing) 
End Sub 

然而,当我调试它,以确保有存放theResponse东西,有但是由于某种原因,它没有把它放到文本框中。它是空白的。

任何帮助将是伟大的!

大卫

UPDATE

好了,所以Form1中:

Dim tmpForm3020 As New frm3020 

Private Sub cmd3020_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd3020.Click 
    tmpForm3020.Show() 
    Me.WindowState = FormWindowState.Minimized 
End Sub 

Private Sub scannerOnCom_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) 
    responceBack = scannerOnCom.ReadLine 
    tmpForm3020.txtNumber.Text = responceBack 
End Sub 

如果那是正确的,那么我得到行错误:

xForm.txtNumber.Text = responceBack

说:

跨线程操作无效:控制'txtNumber'从一个线程访问,而不是它创建的线程。

回答

1
Dim tmpForm3020 As New frm3020 

Private Sub cmd3020_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd3020.Click 
    tmpForm3020.Show() 
    Me.WindowState = FormWindowState.Minimized 
End Sub 

Private Sub scannerOnCom_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) 
    responceBack = scannerOnCom.ReadLine 
    TestData(responceBack) 
End Sub 

Private Sub TestData(ByVal xVal As String) 
    If InvokeRequired Then 
     Me.Invoke(New MethodInvoker(AddressOf TestData)) 
     ' change Me to tmpForm3020 (if it does not work) 
     ' tmpForm3020.Invoke(New MethodInvoker(AddressOf TestData)) 
    Else 
     tmpForm3020.txtNumber.Text = xVal 
    End If 
End Sub 
+0

这只是打开另一种形式(所以现在总共3)。我想要做的就是将该值扫描到已打开窗体的txtbox中。 (表2) – StealthRT

+0

@StealthRT尝试我更新的解决方案。 –

+0

更新了OP,但仍然出现了错误:( – StealthRT

1

您是否明确创建了第二个窗体的实例,或者依赖于默认实例?即是“frm1110”第二个表单的类名,还是您新创建的实例?确保在任何情况下它都是实际显示的实例。

相关问题