構造体を構築するには?

解決


初心者1ヶ月  2004-09-17 09:43:20  No: 116348

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)
の部分で発生しているのですが対処法がわかりません。
教えてください。


葉月  2004-09-17 17:47:59  No: 116349

開始とENDの数が合ってない気もするけど
転記ミスかそーゆー文法なのか

6.0の知識で見る限りでも
EM型のオブジェクトeemの
配列を確保せずに配列格納してメモリに格納できないよう!というエラーじゃないのかな?
Redim(配列の動的確保)等でeemの配列を確保してあげれば動くはず

Redimに関してはHELPで詳しく出ています


葉月  2004-09-17 18:04:06  No: 116350

↑配列確保・・・
簡単に言うと要素数の設定でいいのかな
eem(1).code = Val(TextBox1.Text)

とあるが
eem(1)というものが作成されてる?ちゅーこと

初期宣言で
Dim eem(10) As EM
等と要素を固定でとってしまうか
必要に応じてReDimを使ってその場で要素数を作っていくかという作業をしなくてはいけないと思われます


特攻隊長まるるう  2004-09-17 18:12:57  No: 116351

そうですね。あってます。
>    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


初心者1ヶ月  2004-09-21 13:07:34  No: 116352

配列のサイズを指定したら
エラーも出なく、問題解決することができました。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加