VB.net(VS 2013)组合框item.add从外部事件触发时失败?

时间:2014-01-15 15:31:02

标签: vb.net visual-studio-2013

使用按钮或项目中的其他位置使用以下代码将项目添加到组合框中没有问题。

    CBSpnd.Items.Add("B")

然而,似乎我把同一行放在由我的应用程序外部的事件触发的sub中(在我的情况下,我从打开的excel文档中捕获selectionchange事件),当此行运行代码时简单地停下来没有错误,没有异常,没有,并且其余的例程都没有运行。

有没有人遇到过这个或者知道为什么会这样?我将把相关代码放在下面

    Private Event_cellchange As Excel.DocEvents_SelectionChangeEventHandler
    Sub AddHandlers()
        Event_cellchange = New Excel.DocEvents_SelectionChangeEventHandler( _
            AddressOf CellsChange)
        WS = ExcelWorkbook.Sheets("Prod Data")
        MWS = ExcelWorkbook.Sheets("Machine Layout")
        RemoveHandler WS.selectionChange, Event_cellchange
        AddHandler WS.selectionChange, Event_cellchange

    End Sub

    Public Sub CellsChange(ByVal Target As Excel.Range)

        ChangeText(LblOrder, WS.Range("E" & Target.Row).Value)
        ChangeText(LblOtype, WS.Range("B" & Target.Row).Value)
        ChangeText(LblLbs, WS.Range("G" & Target.Row).Value)
        ChangeText(LblClr, WS.Range("AU" & Target.Row).Value)
        'CBSpnd.Items.Add(WS.Range("AI" & Target.Row).Value)
        'CBSpnd.Items.Add(WS.Range("AM" & Target.Row).Value)
        'CBSpnd.Items.Add(WS.Range("AQ" & Target.Row).Value)
        CBAdd("B")    '**** CODE STOPS HERE, NO ERRORS/EXCEPTIONS ****

        UDOP.Text = WS.Range("C" & Target.Row).Value
    End Sub

    Delegate Sub ChangeTextDelegate(ByVal ctrl As Control, ByVal str As String)
    Private Sub ChangeText(ByVal ctrl As Control, ByVal str As String)
        If ctrl.InvokeRequired Then
            ctrl.Invoke(New ChangeTextDelegate(AddressOf ChangeText), New Object() {ctrl, str})
            Return
        End If
        ctrl.Text = str
    End Sub

1 个答案:

答案 0 :(得分:0)

您的活动正在一个单独的主题上运行。您可以通过在表单的线程上调用它们来正确调用文本框的方法;将项目添加到组合框时,您需要执行相同的操作。

将其添加到事件处理程序的开头

    If Me.InvokeRequired Then
        Me.BeginInvoke(New Action(Of Excel.Range)(AddressOf CellsChange), {Target})
        Exit Sub
    End If

这会将您在事件处理程序中执行的所有操作封送到正确的线程。添加后,您也可以删除文本框的特殊代码。