- ベストアンサー
VB.NETのStructureの使い方を教えてください。
Publicの宣言をしてStructureを使いたいのですが、 2重になっているStructureを使う正しい方法を教えて頂きたいです。 現在 Structure OYA Dim zzz As String Structure KO_1 Dim No1 As String Dim No2 As String Dim No3 As String End Structure End Structure Public TESTOYA As OYA Public TEST_1 As OYA.KO_1 Sub ABCDE() TEST_1.No1 = 1 TESTOYA.KO_1.No1 = 1 End Sub というようになっているのですが、 Sub ABCDE()内の TESTOYA.KO_1.No1 = 1 という使い方をしたいのですが、この状態だとエラーになってしまいます。 TEST_1.No1 = 1 とすれば大丈夫なのですが、これだと OYAを入力してメンバを出すことが出来ないので、2重にする意味がなくなってしまいます。 KO_1は実際はKO_50くらいまであって 実際は連番ではないので、OYA.と入力したら、KOのメンバが出て その後、No1などのメンバが出て欲しいです。 (入力しやすいように) この様な使い方があれば正しい記入方法をご教授願えないでしょうか。 それと、最初の変数zzzの宣言は要らないのですが、 これを省くとエラーになってしまいます。 この部分も正しい使い方ではないように思うのですが、 ご教授頂ければ幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Structureの定義の中に別のStructureの定義を書かないようにしましょう。 別々に定義して、親のStructureの定義の中に、メンバ変数として、子のStructureを用意してあげてください。 例えば、 Public Structure MonthDay Public intMonth As Integer Public intDay As Integer End Structure Public Structure YearMonthDay Public intYear As Integer Public monthAndDay As MonthDay End Structure こんな風にすれば、おそらくできるはずです。 でも、わざわざStructureの中にStructureを入れる必要性はないかも知れません。 Structureで定義する方がいいのか、Classとした方がいいのか、いろいろ調べて実装してみるといいと思います。
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
構造体OYAに 構造体KO_1のオブジェクトをメンバーとして持たせましょう Structure OYA dim zzz as String Dim objKo as KO_1 Structure KO_1 dim No1 as String dim No2 as String dim No3 as String End Structure ' これを追加 End Structure Public TESTOYA As OYA Sub ABCD() TESTOYA.objKo.No1 = "Test" End Sub といった具合です
お礼
redfox63様ご回答ありがとうございます。 お教え頂いた方法で思い通りの状態になりました。 また、zzzの部分が不要という疑問も解決しました。 ありがとうございました。
お礼
Gab_km様ご回答ありがとうございました。 こちらの方法でも思い通りの状態になりました。 おっしゃる通り入力時に便利になる点を除いたら Structureである意味がほとんどない使い方のようですので、 次の機会にはClassについて勉強してみたいと思います。 どうもありがとうございました。