TextBoxの内容を構造体にしたいのですが
エラーが出てしまいます。
Public Structure EM
Dim code As Integer
End Structure
Dim eem() As EM
Dim aa As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
eem(1).code = Val(TextBox1.Text)
End Sub
End Class
TextBoxに1を入れて実行したのですがエラーになります。
メッセージは
System.NullReferenceException' のハンドルされていない例外が test4.exe で発生しました。
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 というものです。
eem(1).code = Val(TextBox1.Text)
の部分で発生しているのですが対処法がわかりません。
教えてください。
開始とENDの数が合ってない気もするけど
転記ミスかそーゆー文法なのか
6.0の知識で見る限りでも
EM型のオブジェクトeemの
配列を確保せずに配列格納してメモリに格納できないよう!というエラーじゃないのかな?
Redim(配列の動的確保)等でeemの配列を確保してあげれば動くはず
Redimに関してはHELPで詳しく出ています
↑配列確保・・・
簡単に言うと要素数の設定でいいのかな
eem(1).code = Val(TextBox1.Text)
とあるが
eem(1)というものが作成されてる?ちゅーこと
初期宣言で
Dim eem(10) As EM
等と要素を固定でとってしまうか
必要に応じてReDimを使ってその場で要素数を作っていくかという作業をしなくてはいけないと思われます
そうですね。あってます。
> Dim eem() As EM
構造体が配列として宣言されています。構造体のみの構築なら
Dim eem As EM
です。配列でサイズが設定されていませんのでメモリ上に実体化
(インスタンス化)していません。というエラーメッセージです。
[VB.NET]ではフォームを New してなかったり、エクセルなどの
参照を設定してなかったり、参照型の変数でよく出るエラー
メッセージです。覚えておいて下さい。
『配列変数の宣言』『配列の初期化』についてはヘルプや
入門書で学んで下さい。絶対に書いてある基礎知識です。
葉月さんのおっしゃるように
Dim eem(1) As EM
と宣言するか、使用前に
ReDim eem(1)
としてインスタンスを生成して下さい。
>開始とENDの数が合ってない気もするけど
>転記ミスかそーゆー文法なのか
クラスの頭の記述が抜けてますね。[VB.NET]では自動生成
されるコードが沢山あるのでそれを飛ばして転記する時の
転記ミスでしょう。
↓こんな感じ
Public Class Form1
Inherits System.Windows.Forms.Form
'" Windows フォーム デザイナで生成されたコード "
'省略
Public Structure EM
Dim code As Integer
End Structure
Dim eem As EM
Dim aa As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
eem.code = Val(TextBox1.Text)
End Sub
End Class
配列のサイズを指定したら
エラーも出なく、問題解決することができました。
ありがとうございました。
ツイート | ![]() |