'For'循环后跳过代码

时间:2014-04-14 15:52:48

标签: vb.net datagridview

我在表单加载事件期间看到了一些奇怪的行为。一切都按预期工作,直到我运行For循环。 Next行以下的任何代码都不会触发。我没有得到任何错误,表单只是加载好像每件事都好,但它忽略了那些线条。我在循环的上方和下方放置了msgbox("test")以确认此行为。

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消息框将会触发。如果我注释掉sortmode行,一切正常。关于在循环中设置排序模式的一些事情是阻止其余的代码运行。

P.S。如果有人知道一个更好的方法来制作数据绑定datagridview与额外的列不可分类我都是耳朵。

2 个答案:

答案 0 :(得分:4)

问题是经常执行一次的循环

NET中的数组从索引0开始,最大索引是数组的长度减去一个

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

你的循环导致一个异常,它可能被捕获在调用者代码中并被静默抑制,或者在加载方法中,并且如果你在VS调试器中执行这个代码,那么well know problem就不会捕获它。以附加调试器的64位代码加载事件。

答案 1 :(得分:2)

您的代码中存在错误:您无法枚举直至DataGridView1.Columns.Count 修复如下:

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

顺便说一句,你没有看到MsgBox,因为DataGridView1.Columns(i)将引发一个异常,但是如果它在Load方法中,它将被忽略