前提・実現したいこと
数が変動する設定項目(Label/TextBox/Button)を作るため、
手動によるLabel・TextBoxの生成を行う処理を作っています。
対応するボタンを押した際に、対応するTextBoxの値を読み込もうとしていますが、System.NullReferenceExceptionが発生しています。
初期化をしているはずなのですが、System.NullReferenceExceptionがなぜ出るのか分からなく、困っています。よろしくお願いいたします。
発生している問題・エラーメッセージ
System.NullReferenceException
該当のソースコード
VBNET
1 private DMaxNum As Integer = 200 2 private DLabel(DMaxNum) As System.Windows.Forms.Label 3 private DText(DMaxNum) As System.Windows.Forms.TextBox 4 Private DWBtn(DMaxNum) As System.Windows.Forms.Button 5 Private DRBtn(DMaxNum) As System.Windows.Forms.Button 6 Private Const TextAStart As Integer = 232 'テキストBoxのスタート位置. 7 Private Const BtnAllStart As Integer = 482 8 9 Private Sub plcForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load 10 11 'UI初期化 12 InitControl() 13 14 End Sub 15 16 ''' <summary> 17 ''' UI関係の初期化 18 ''' </summary> 19 Private Sub InitControl() 20 Dim i As Integer 21 Dim Num As Integer = 0 22 Dim i As IpArea_X = BtnAllStart 23 24 For i = 1 To DMaxNum 25 DLabel(i) = New System.Windows.Forms.Label 26 DText(i) = New System.Windows.Forms.TextBox 27 28 DLabel(i).Name = "lbl" & eName 29 DLabel(i).Text = "D" & CInt(1000 + i) 30 DLabel(i).Location = New Point(sx + Num * IpArea_X, sy + YIdx * Yohaku) 31 DLabel(i).Size = New System.Drawing.Size(230, 18) 32 DLabel(i).Text = String.Format("DM{0} {1}", CInt(i), eName) 33 34 DText(i).Name = "txtD" & eName 35 DText(i).Location = New Point(sx + TextAStart + Num * IpArea_X, sy + YIdx * Yohaku) 36 DText(i).Size = New System.Drawing.Size(100, 18) 37 38 DWBtn(i) = New System.Windows.Forms.Button 39 DRBtn(i) = New System.Windows.Forms.Button 40 41 DWBtn(i).Name = "BtnDW" & eName 42 DWBtn(i).Text = "書込" 43 DWBtn(i).Location = New Point(sx + BtnAStart + Num * IpArea_X, sy + YIdx * Yohaku) 44 DWBtn(i).Size = New System.Drawing.Size(50, 20) 45 DRBtn(i).Name = "BtnDR" & eName 46 DRBtn(i).Text = "読込" 47 DRBtn(i).Location = New Point(sx + BtnRStart + Num * IpArea_X, sy + YIdx * Yohaku) 48 DRBtn(i).Size = New System.Drawing.Size(50, 20) 49 50 'フォームへのコントロール追加 51 Me.Controls.Add(DLabel(i)) 52 Me.Controls.Add(DText(i)) 53 Me.Controls.Add(DWBtn(i)) 54 Me.Controls.Add(DRBtn(i)) 55 56 AddHandler DWBtn(i).Click, AddressOf Me.OnWButton 57 AddHandler DRBtn(i).Click, AddressOf Me.OnRButton 58 Next 59 End Sub 60 61 ''' <summary> 62 ''' Dataの書き込み 63 ''' </summary> 64 ''' <param name="sender"></param> 65 ''' <param name="e"></param> 66 Private Sub OnWButton(ByVal sender As System.Object, ByVal e As EventArgs) 67 '対象ボタンの選出 68 Dim idx As Integer = 0 69 Dim i As Integer 70 71 Dim btn As Button = CType(sender, Button) 72 Dim setAddres As String = btn.Name.Substring(6) 73 Dim strValue As String = "" 74 75 For i = 0 To DMaxNum 76 If DLabel(i).Name = "lbl" & setAddres Then 'ここでSystem.NullReferenceException 77 idx = i 78 strValue = DText(idx).Text '値を入れる 79 Exit For 80 End If 81 Next 82 End Sub
試したこと
1)デバッカにてウォッチ追加
DLabelを設定し確認したが、ウォッチの方の値には入っている。
補足情報(FW/ツールのバージョンなど)
OS:Windows10
開発環境:Visual Studio2017 / .NET4.0
回答1件
あなたの回答
tips
プレビュー