首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类DatagridView,onPaint事件

子类DatagridView,onPaint事件
EN

Stack Overflow用户
提问于 2013-08-19 23:23:29
回答 1查看 757关注 0票数 0

我对DataGridView进行子类化,以扩展和绑定一些常见的功能。

在这里,我覆盖了很少(大约10个)事件,除了onPaint事件,一切正常。

代码:

代码语言:javascript
复制
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:对象引用没有设置为对象的实例。

但是,如果我启动一个程序,它的工作正常。这个类中的所有其他事件也正常工作,不报告这一点。

造成这一错误的原因是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-19 23:50:37

我认为您的问题是,设计视图中的datagridview的当前行可能为空。这就是导致System.NullReferenceException的原因,如果您读取出现并告诉您错误的消息框,它可能会说错误位于以下一行:sel_row = Me.CurrentRow.Index + 1。解决这个问题的一种方法是这样做:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18324652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档