我对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的位置是大的红色'X‘和红色边框。
System.NullReferenceException:对象引用没有设置为对象的实例。
但是,如果我启动一个程序,它的工作正常。这个类中的所有其他事件也正常工作,不报告这一点。
造成这一错误的原因是什么?
发布于 2013-08-19 23:50:37
我认为您的问题是,设计视图中的datagridview的当前行可能为空。这就是导致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我粘贴了您发布的代码并得到了您所做的错误,并添加了这个条件语句来检查当前行是否为空,以防止在设计视图中抛出异常。(您必须构建项目,以消除控件中的错误消息。)HTH
https://stackoverflow.com/questions/18324652
复制相似问题