2013-08-19 87 views
0

我是繼承DataGridView以擴展並綁定某些常見功能。
在這裏,我覆蓋了很少(約10)事件和一切工作正常,除了onPaint事件。繼承DatagridView,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:未將對象引用設置爲對象的實例。

但是,如果我啓動一個程序,它正常工作。 此課程中的所有其他活動也能正常工作,並且不會報告。

什麼可能是這個錯誤的原因?

回答

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 

我粘貼您發佈並得到了你做了錯誤,並添加此條件語句來檢查代碼,如果當前行是空保持在設計視圖中拋出異常。 (您將不得不構建項目以擺脫控件中的錯誤消息。)HTH

+0

正如您所設想的那樣,就是這樣。現在工作沒有任何錯誤。謝謝。 –

+0

當然,沒問題 – davidsbro