2014-04-14 43 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方法中,这个异常将被忽略。