我需要在DataGridView中获取ComboBox的选定值。我有部分工作,但是如果更改网格中的另一个ComboBox,则会收到 Null Reference Exception 。这是我的代码:
I need to get the selected value of a ComboBox in a DataGridView. I have it partially working, but I get a Null Reference Exception if I change a another ComboBox in the grid. Here's my code:
Private Sub dgvSampleList_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles dgvSampleList.EditingControlShowing Dim comboBox As ComboBox = CType(e.Control, ComboBox) If (comboBox IsNot Nothing) Then 'Remove an existing event-handler RemoveHandler comboBox.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged) 'Add the event handler. AddHandler comboBox.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged) End If End Sub Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Dim comboBox As ComboBox = CType(sender, ComboBox) 'Display selected value MsgBox("ProgramID: " & comboBox.SelectedValue.ToString) End Sub在第一次更改ComboBox时此方法正常,但是如果更改了另一个ComboBox,则生成Null引用异常。任何想法为什么会这样?注意:我在MSDN的讨论表上找到了大部分代码。
This works fine the first time the ComboBox is changed, but generates a Null Reference Exception if another ComboBox is changed. Any ideas why this is happening? Note: I found most this code on MSDN's discussion forms.
谢谢!
Peter
推荐答案最好避免在不必要时使用全局变量。
It's best to avoid global variables when they are unnecessary.
您只需要在尝试访问 comboBox 的属性之前测试comboBox是否为空:
You just need to test for whether comboBox is nothing before trying to access a property of comboBox:
Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Dim comboBox As ComboBox = CType(sender, ComboBox) 'Display selected value If comboBox IsNot Nothing Then MsgBox("ProgramID: " & comboBox.SelectedValue.ToString) End If End Sub在我看来,当 comboBox 从旧值设置为新值时,这个SelectedIndexChanged事件会同时被调用新的组合框。我怀疑当调用旧的 comboBox 时,发件人为null / Nothing,因为其值正在更改。也许。但是无论发生什么,null都是null。在尝试访问其任何属性之前,只需测试它是否不为空即可。
It seems to me that when the comboBox is set from an old value to the new value, that this SelectedIndexChanged event gets called for both the old and new comboboxes. I suspect that when it gets called for the old comboBox, the sender is null/Nothing because its value is getting changed. Maybe. But no matter what it is happening, a null is a null. Just test that it's not null before you try to access any of its properties.
更多推荐
获取DataGridViewComboboxColumn SelectedValue(VB.Net)
发布评论