我在表单加载事件期间看到了一些奇怪的行为。一切都按预期工作,直到我运行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与额外的列不可分类我都是耳朵。
答案 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
方法中,它将被忽略