我有一個名為“lookuptable”的表單,里面有一個datagridview“dgv1”。我使用面板“panel3”在我的主表單“儀表板”中插入了“lookuptable”。
這是代碼:
Private Sub btnPOS_Click(sender As Object, e As EventArgs) Handles btnPOS.Click
TabControl1.SelectedTab = POS
Dim f As New LookUpTable With {.TopLevel = False, .AutoSize = False}
f.Dock = DockStyle.Fill
Me.Panel3.Controls.Add(f)
f.Show()
End Sub
我正在嘗試獲取單元格編號 5 的值,但出現此錯誤System.NullReferenceException: 'Object reference not set to an instance of an object。
這是我用來獲取值的代碼:
Private Sub CustomPrice_Load(sender As Object, e As EventArgs) Handles MyBase.Load
PriceTxtBox.Text = LookUpTable.dgv1.CurrentRow.Cells(5).Value
'KeyPreview = True
End Sub
Dgv1 單元格 5 有資料。那么為什么它回傳null?
uj5u.com熱心網友回復:
正如我評論的那樣,您當前遇到的問題是因為當代碼LookUpTable f在第一個代碼片段中創建表單時......
Dim f As New LookUpTable With {.TopLevel = False, .AutoSize = False}
然后f是該方法的本地。因此,當代碼到達第二個代碼片段時……它不會知道表單f……換句話說,如果我們嘗試使用f該行訪問第二個代碼片段中的表單……
PriceTxtBox.Text = f.dgv1.CurrentRow.Cells(5).Value.ToString()
編譯器會抱怨它不知道什么f是……
因此,一種可能的解決方案(不一定是最佳解決方案)是制作f一個全域變數,例如……
Dim f As LookUpTable
然后更改其他代碼片段,如下所示。
Private Sub btnPOS_Click(sender As Object, e As EventArgs) Handles btnPOS.Click
TabControl1.SelectedTab = POS
f = New LookUpTable With {.TopLevel = False, .AutoSize = False}
f.Dock = DockStyle.Fill
Me.Panel3.Controls.Add(f)
f.Show()
End Sub
目前還不清楚下面的代碼在哪里被呼叫,因為它似乎是一個Load事件。但是,如果它與上面的代碼形式相同,那么這應該可以作業......
Private Sub CustomPrice_Load(sender As Object, e As EventArgs) Handles MyBase.Load
PriceTxtBox.Text = f.dgv1.CurrentRow.Cells(5).Value
'KeyPreview = True
End Sub
我希望這是有道理的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473634.html
上一篇:VB.NET創建Sub的字典
