2013-07-30 19 views
1

當組合框中的索引發生更改時,我有一個SelectedIndexChanged事件觸發。如何判斷用戶是否導致selectedindexchanged

我從計時器中的代碼中調用此函數, ,用戶在選擇選項時調用它。

我無法弄清楚如何判斷是否是導致此事件觸發或其他事件的用戶操作。

我在我的計時器中嘗試過一個標誌,它可以工作,但我一直在尋找更開放的解決方案,這將是更有前途的證明。

+0

更好地顯示代碼,你有.. – matzone

+0

是的,代碼請 - 需要了解你如何觸發這個事件的計時器:你會改變選擇索引觸發事件或直接調用事件處理程序的方法? – Rex

+0

從你所說的話(按照上述意見的要求:代碼,請!!)你正在做的是最好的程序。組合框(或任何其他控件)的內部屬性無法確定誰使用它(用戶或運行時的代碼);你必須成爲執行這種差異化的人,例如,通過邏輯標誌。 – varocarbas

回答

1

我已經通過添加事件解決了這個selectionchangecommitted

Private Sub cboGraphType_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboGraphType.SelectionChangeCommitted 
    startStopTimer(True) 
End Sub 

這則停止計時器,然後SelectionChanged事件後,這仍然觸發。

但這個事件停止我的計時器,這正是我想要的。

0

關於使用任何標誌...

Dim ByWhat As String 

Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer1.Tick 
    ByWhat = "TIMER1" 
    MyJob()  
End Sub 

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged 

    ByWhat = "COMBOBOX1" 
    MyJob() 

End Sub 

Sub MyJob() 

    Select Case ByWhat 
    Case "TIMER1" 
    'code if called by timer1 

    Case "COMBOBOX1" 
    'code if called by combobox1 

    End Select 

    ByWhat = "" '---->Clear it 
End Sub 
+0

我試過了,它不起作用,因爲selectedIndexChanged可以在tick事件的不同線程上。 – f1wade

相關問題