2014-04-14 44 views
0

我在表單加載事件中看到一些奇怪的行爲。一切正常,直到我運行一個For循環。在Next行之下的任何代碼都不會觸發。我沒有得到任何錯誤,表單只是像每一件好東西一樣加載,但它忽略了這些行。我已在循環的上方和下方放置了一個msgbox("test")以確認此行爲。代碼在'For'循環後跳過

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    'Do some form loading stuff 

    msgbox("test1") 'This will Fire 

    For i = 0 To DataGridView1.Columns.Count 
     DataGridView1.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable 
    Next 

    msgbox("test2") 'This wont fire 

End Sub 

我可以只把循環的形式負載的底部,解決這個問題,但它的錯誤我不明白爲什麼會這樣。

編輯:進一步測試後,我發現,如果我只是運行FOR循環而不改變排序模式,那麼test2的messagebox就會觸發。如果我註釋sortmode行一切正常。有關在循環中設置分類模式的問題阻止了其他代碼的運行。

P.S.如果有人知道一個更好的方式來創建一個數據綁定datagridview與額外的列不排序我全部耳朵。

+3

你的for循環應該是「對於我= 0到DataGridView1.Columns.Count-1」我敢肯定你有一個異常,不被捕獲。 –

回答

4

的問題是,執行一次往往

陣列循環中NET開始於指數爲零,最高指數是數組的長度減去一個

For i = 0 To DataGridView1.Columns.Count - 1 
    DataGridView1.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable 
Next 

你的循環會導致異常可能被困在調用者代碼中,並且被靜默地抑制,或者處於加載方法中,並且如果您在VS調試器中執行此代碼,那麼在帶有附加了調試器的64位代碼中的加載事件的情況下,該代碼根本無法獲得well know problem

2

有一個在你的代碼中的錯誤:無法枚舉直到DataGridView1.Columns.Count 修復這樣的:

For i = 0 To DataGridView1.Columns.Count -1 
    DataGridView1.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable 
Next 

順便問一下,你看不到MSGBOX因爲DataGridView1.Columns(i)爲會引發一個異常,但是如果在Load方法中,這個異常將被忽略。