🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

1120閲覧

LabelなどのUI手動生成時に、コード内で関連付けが出来ていない

TEC_S

総合スコア79

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/01/05 23:33

編集2021/01/06 00:37

前提・実現したいこと

数が変動する設定項目(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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/01/05 23:51

> For i = 1 To DMaxNum > For i = 0 To DmMaxNum
退会済みユーザー

退会済みユーザー

2021/01/06 00:13 編集

提示されたソースには、宣言されていない変数が含まれています。 抜粋でなく全ソースを提示してください。
TEC_S

2021/01/06 00:14

すみません。ありがとうございます(;'∀')
Zuishin

2021/01/06 00:35

修正されたのを見ても結局 DmMaxNum がどこにも宣言されていないので動くはずがないんですが。次回質問する時にはコピペしましょう。違うコードには違うバグが入るので、質問者と回答者で同じものを見ないと意味がありません。
TEC_S

2021/01/06 00:38

ご指摘、ごもっともです。 次回質問するときは、コピペにて対応をしたいと思います。 ありがとうございました。
guest

回答1

0

自己解決

修正依頼より、解決しました。
ありがとうございました。

VBNET

1 2 ''' <summary> 3 ''' Dataの書き込み 4 ''' </summary> 5 ''' <param name="sender"></param> 6 ''' <param name="e"></param> 7 Private Sub OnWButton(ByVal sender As System.Object, ByVal e As EventArgs) 8 '対象ボタンの選出 9 Dim idx As Integer = 0 10 Dim i As Integer 11 12 Dim btn As Button = CType(sender, Button) 13 Dim setAddres As String = btn.Name.Substring(6) 14 Dim strValue As String = "" 15 16 For i = 1 To DMaxNum 17 If DLabel(i).Name = "lbl" & setAddres Then 'ここでSystem.NullReferenceException 18 idx = i 19 strValue = DText(idx).Text '値を入れる 20 Exit For 21 End If 22 Next 23 End Sub

投稿2021/01/06 00:15

編集2021/01/06 00:37
TEC_S

総合スコア79

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問