2014-01-15 41 views
0

我沒有任何問題使用下面的代碼在我的項目中的按鈕或其他地方添加項目到我的組合框。VB.net(VS 2013)combobox item.add在從外部事件中觸發時失敗?

CBSpnd.Items.Add("B") 

然而,似乎如果我把在子同一行由外到我的應用程序的事件(在我的情況下,我捕捉從打開的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 
+0

告訴Visual Studio打破「調試>異常」菜單中的所有異常,並選擇「投擲」下的「公共語言運行時異常」下的選項。希望這會導致VS實際向你顯示錯誤。確保在完成這個錯誤時關閉此選項,否則會令您發瘋。我有一種感覺,你的問題可能與線程有關。 –

回答

0

您的事件正在單獨的線程上運行。通過在表單的線程上調用它們,可以正確調用文本框的方法;當您將項目添加到組合框時,您需要做同樣的事情。

添加到您的事件處理程序的開始

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

這將封送您在事件處理程序,以正確的線程做的一切。一旦你添加了這個,你可以刪除文本框的特殊代碼。

+0

美麗!這是我第一次不得不處理線程,並且讓它變得更加簡單。謝謝。 –

相關問題