我正在继承DataGridView以扩展和绑定一些常见的功能 在这里,我覆盖了几个(大约10个)事件,除了onPaint事件之外,一切正常。
代码:
Imports System.ComponentModel
Public Class xDataGridView
Inherits DataGridView
Private _selected_row As Integer
Protected Overrides Sub onPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
sel_row = Me.CurrentRow.Index + 1
MyBase.OnPaint(e)
End Sub
<Browsable(True)> _
Public Property sel_row() As Integer
Get
Return _selected_row
End Get
Set(ByVal Value As Integer)
_selected_row = Value
End Set
End Property
End Class
在_Paint事件处理程序下包含此类的主窗体中,我希望选择行作为公共属性:mySel_row = myDGV.sel_row
当我试图在VBIDE中打开主要表单的设计师时,DGV就是大红色&#39; X&#39;带红色边框。
System.NullReferenceException:未将对象引用设置为对象的实例。
但如果我开始一个程序它正常工作。 此课程中的所有其他事件也能正常工作,并且不会报告。
导致此错误的原因是什么?
答案 0 :(得分:1)
我认为您的问题是设计视图中datagridview的当前行可能为null。这就是造成System.NullReferenceException的原因,如果你读到出现的消息框并告诉你错误,它可能会说错误在这一行:sel_row = Me.CurrentRow.Index + 1
。解决这个问题的一种方法是做这样的事情:
Protected Overrides Sub onPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
If (Not IsNothing(Me.CurrentRow)) Then sel_row = Me.CurrentRow.Index + 1
MyBase.OnPaint(e)
End Sub
我粘贴了您发布的代码并得到了您所做的错误,并添加此条件语句以检查当前行是否为null可以防止在您处于设计视图时抛出异常。 (您必须构建项目以摆脱控件中的错误消息。)HTH