- ベストアンサー
VB .Netの構造体について
構造体について教えて下さい。 クラスで構造体を作成しました。 クラスでIniファイルを読み込み、Formのボタンを押した処理の中で構造体を読み込みたいのですが、何をしても空白(Nothing)になります。 クラスの中では格納されたままなのに・・・。 違う場所で構造体を呼んだときは別の処理がいるのでしょうか? それともVB .Netの仕様なのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>Dim ini As Test >MassageBox.Show (ini.bbb) ここでの変数iniは、この関数の中で作成された変数なので、iniファイルの設定を保持していません。 #2では、フォームの側に値を渡していますけど、その関数の外にでたら失われてしまいます。 保持しておきたいなら、そうした、最初に渡されたときにフォームのクラスの中の変数で保持するようにするか 単純には、こうした関数の外での寿命を持つ変数としてモジュールの中での変数を作っておくとかそういうことをしなければいけません。 やり方は色々あるので、 例えば、iniファイルを保持するクラスを作っているというのなら、 フォームとか使用するクラスで、ファイル名を指定して、初期化して値を保持するようにし、必要ならそこから値を読み出すようにするとよいと思います。 例えば、iniファイルを保持するクラスを IniFileクラスとすると 使用するフォームの側で Dim ini as IniFile = new IniFile("data.ini") とかしておいて (pointはプロパティでTest構造体) ini.point.aaa ini.point.bbb とかして使うようにすればいいと思います。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2>えっと、まずですね。 frm.Proc1 = (pt) の部分がビルド通りません、エラーになります。 最低でも frm.Proc1(pt) じゃないといけないです。 あと、 Dim frm As Form1 は、 Dim frm As Form1 = new Form1 でないと、例外が発生するはずです。 そこら辺をちゃんとしたら、構造体をProc1に渡すことができるのはちゃんとできました。(Proc1でaとbに値を設定することは確認できました) そもそもMyPointが呼ばれるようなプログラムになっていないのではないでしょうか
補足
返答が遅くなってしまい本当にすみません。 上記のことを変更するできたのですが、下記の方法だとできなくなりました。 起動時にIniファイルの設定を構造体に格納して、 データを受信した時に構造体を参照しにいくとNothingになっています。 構造体の宣言は前回書いたとおりです。 データを受信した時は Private Sub Received(ByVal sender As Object, ByVal evt As UdpEventArgs) Handles _UDP.DataReceived Dim ini As Test MassageBox.Show (ini.bbb) End Sub よろしくお願いします。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>Class.vb内ではデータを保持したまま使えるのですが、 クラスの中でdim … Asとかで実際に確保したという意味ですよね。補足では、構造体の定義だけしか書いていないと思うので、もう少し詳しく補足していただけませんか? >Form1.vbでaaaを使用しようとしてもNothingになっています。 >引き継がれてこないのでしょうか? フォームの側でどのようにクラスや構造体を利用しているのかもう少し詳しく補足していただけませんか? 引き継がれるというのは、クラスの継承をしたということですか? できたら、ソース(クラスの定義の部分と、それを、フォームの側で利用している部分のソース)を補足でアップしていただけませんか
補足
Class.vbで Public Structure Test Public aaa As Integer Public bbb As Integer End Structure Public Sub MyPoint() Dim pt As Test Dim frm As Form1 pt.aaa = 10 pt.bbb = 20 frm.Proc1 = (pt) End Sub Form1.vbで Public Sub Proc1(pt As Test) Dim a As Integer Dim b As Integer a = pt.aaa b = pt.bbb End Sub としているのですが、a又はbに値がはいりません。 Nothingになります。 間違っているのでしょうか?
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
もうひとつ意味がわからないのですが どんなふうにやっているのですか?
補足
補足します。申し訳ないです。 Class.vbに Public Structure test Public aaa As Integer Public bbb As Integer End Structure を宣言しました。 それをClass.vb内ではデータを保持したまま使えるのですが、Form1.vbでaaaを使用しようとしてもNothingになっています。 引き継がれてこないのでしょうか? 又は何か宣言が必要なのでしょうか?
お礼
たくさん教えていただきありがとうございました!