• ベストアンサー

クラスのプロパティに構造体を使いたい。

VB6+SP5にて開発しております。 「クラス名.構造体名.変数名 = 値」といった感じで構造体をプロパティとして使用できればと考えているのですが、単純に構造体を定義しただけでは駄目なようです。実現は無理なのでしょうか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • haporun
  • ベストアンサー率40% (230/562)
回答No.2

クラスの中に別のクラスなら入れられます。 '''''''''''''''''''' 'Complexクラスモジュール Public X As Double, Y As Double Public Property Get Length() As Double Length = (X ^ 2 + Y ^ 2) ^ 0.5 End Property Public Property Get Arg() As Double '角度 End Property '''''''''''''''''''' 'CompRectクラスモジュール Public Z1 As New Complex Public Z2 As New Complex Public Property Get Size() As Double Size = Abs((Z1.X - Z2.X) * (Z1.Y - Z2.Y)) End Property '''''''''''''''''''' '標準モジュール Public Rectangle As New CompRect Sub Main() Rectangle.Z1.X = 2 Rectangle.Z1.Y = 5 Rectangle.Z2.X = 5 Rectangle.Z2.Y = 8 Debug.Print Rectangle.Size End Sub 単純に複素数平面上の長方形の大きさを出してくれるクラスです。 ちなみに、 クラス名.構造体名.変数名 は絶対ムリです。 クラス変数名.クラス変数名.変数名 ならOKです。 クラスモジュールはそれ自体が変数でないことを忘れないでください。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

クラスのPublicなプロパティにユーザ定義体(構造体)は使用出来ません。 これは、VBのクラスがオートメーション型と呼ばれているVariantに格納できる形式以外、メソッドやプロパティを公開できないためです。

関連するQ&A

  • スレッドセーフな構造体の作り方

    C++でマルチスレッド環境での開発をしています。 構造体のそれぞれのデータを保護したいために、スレッドセーフな構造体を 定義したいと思っているのですが、どのようにすれば一番効率的に排他制御ができるでしょうか? typdedef struct _DATA { int i; double b; char c; } DATA; たとえば、上のような構造体であれば、それぞれの変数をガードしたいと考えています。 構造体をクラスでラップする方法も考えたのですが、今一つピンと来ません。 もし便利なライブラリがあれば、ライブラリ名と使い方などを教えて頂ければ幸いです。 どうぞよろしくお願いします。

  • クラスと構造体

    VB6.0です。 ある画面の入力値を保持するオブジェクトを作成しようとしています。 このオブジェクトは、複数の画面やクラスの間で受け渡しすることを想定しています。 このオブジェクトは、クラスと構造体のどちらにした方がいいんでしょうか?

  • VB6でやると構造体の配列になる変数をVB2008では何で作ればいいか

    VB6でプログラムを作っていたときは 値のセットが配列になるとき 構造体を動的配列で宣言してデータを足して作りました。 VB2008で開発をすることになり 同じようなことをしたいのですが もっと便利なやり方が登場したりするのでしょうか? クラスで挑戦したのですが動的配列はできないようでした。

  • VB2005の構造体で配列を含む構造体へアクセスするプロパティの記述方法

    VB2005の構造体で、以下のように Dantaiという配列を含む構造体があり、 プロパティを記述する方法で困っています。 Structure Person Dim namae As String Dim toshi As Integer end Structure Structure Dantai Dim m_DantaiMei As String Dim m_Hito() As Person Public Sub New(mei As String) m_DantaiMe = mei Redim m_Hito(100) End Sub '団体名 Public Property Dantai_Mei() As String Get Return m_DantaiMei End Get Set(ByVal value As String) m_DantaiMei = value End Set End Property '人 Public Property ???  '???????????? どのようにプロパティを設定したらよいのでしょうか? '???? '???? 配列で、しかも構造体です。 '???? '???? End Property End Structure Dim dantai As New Dantai("A") MessageBox(dantai.Dantai_Mei) MessageBox(人100人を表示させたい) '?????????????????????????? あと、構造体のDimはデフォルトで、PublicでしょうかPrivateでしょうか? VB2005の構造体について、VB6との違い、クラスとの違いなど詳しく書かれている サイトなどご存じの方教えて下さい。

  • perlはc++のようなクラスや構造体は作れない?

    c++で class hoge{ hoge(); int menber; }; というようなクラス定義と hoge x; というようなクラス変数定義のようなのは、Perlではできないのでしょうか。 メンバ関数はべつにいいのですが、その構造を配列にして管理したいのです。 たとえば、個人情報のような。 Perlではスタティックなメンバしか持てないと聞いたのですが、本当ですか?

    • ベストアンサー
    • Perl
  • 構造体の値受け渡しについて

    初歩的な質問で申し訳ありません。 現在、下記の現象に悩んでいます。 私の勉強不足が原因で大変恐縮なのですが、知見のある方はぜひアドバイスを宜しくお願い致します。 開発環境:VisualStudio2005.NET C# 現在下記のような構成でプログラムを開発しています。  ・構造体を定義しているクラス  ・メイン画面  ・サブ画面 構造体定義を共有化し、 メイン画面からプロパティ渡しでサブ画面にデータを渡しサブ画面のみで構造体の中身を編集したいのですが、※1の代入のタイミングで、メイン画面側の構造体も値が変わってしまいます。 いろいろ調べてみたのですが構造体は値型の受け渡しと書いている記事しか見つかりませんでした。 上記機能を実現するための解決法をご存知の方がいらっしゃいましたらアドバイス宜しくお願い致します。 //============================================== //構造体定義クラス //============================================== public class StructureCommonClass { public struct TestType { public int Data; } } //============================================== //メイン画面 //============================================== public partial class Form1 : Form { private StructureCommonClass.TestType[] _Test = new StructureCommonClass.TestType[3]; //コンストラクタ public Form1() { InitializeComponent(); _Test[0].Data = 10; _Test[1].Data = 20; _Test[2].Data = 30; } //取得用プロパティ public StructureCommonClass.TestType[] GetTestData { get { return _Test; } } //ボタンイベント private void button_F1_Click(object sender, EventArgs e) { Form2 _frm = new Form2(this); _frm.ShowDialog(); _frm.Dispose(); } } //============================================== //サブクラス //============================================== public partial class Form2 : Form { private Form1 _mainForm; private StructureCommonClass.TestType[] _Test; public Form2(Form1 _frm) { InitializeComponent(); _mainForm = _frm; } //フォームロード private void Form2_Load(object sender, EventArgs e) { _Test = _mainForm.GetTestData; _Test[0].Data = 50; //---- ※1 ---- } }

  • 構造体がObjectクラスを継承していることについて

    本を読んでいましたら、構造体はObjectクラスを継承している とありました。 実際構造体を定義して使用してみると、 「ToString」メソッドが存在するなどで、継承されているのだな と思うのですが、 構造体はObjectクラスを継承しています という情報はどのように確認すれば良いのでしょうか? 同じようにクラスがどのクラスを継承していますという情報も確認できたら嬉しいです。 Structure ステートメントのヘルプを見ても載っていないように感じました。 確認方法が知りたいです。 もし宜しければ、ご回答お願い致します。

  • 構造体と構造体型の変数宣言箇所

    はじめてborlandC++builder6でプログラムを作っているのですが、構造体と構造体型の変数宣言箇所についてわからないことがあるので質問させてください。 あるフォームのソースファイル(○○○.cpp)内の関数で、自分で定義した構造体を使う場合、ヘッダファイル(○○○.h)に構造体を定義すると、関数内で「変数が未定義」エラーになってしまいます。一方、ソースファイル(○○○.cpp)の先頭に書けばエラーになりません。  ヘッダファイルに変数定義した場合とソース内の先頭に構造体と構造体型変数を定義するのでは何が違ってくるのでしょうか?

  • 構造体をコレクションに入れて扱いたいのですが…

    当方、Windows2000(SP2) + VB6.0(SP5) の環境です。 今、私が困っている事なのですが、宣言した構造体に入れた値を、 構造体ごとコレクションに追加して扱いたいと言う所なのです。 しかし最初の「構造体をコレクションに追加する」と言う時点で躓いています。 もしかして、構造体ごとコレクションに登録すると言う事は出来ないのでしょうか? 私が考えて書いたコードは以下のようになっております。 --- 標準モジュールにて構造体を宣言 --- Public gcolAddData As New Collection 'Collectionオブジェクト Public Type AddData '各データをレコードで獲得 varName As Variant varPostCd As Variant varAddress As Variant varTellNum As Variant End Type Public gAddData As AddData --- 以下が実際に走っているソースです --- '構造体に取得する With gAddData --- ここで構造体の各変数に値を入れています --- End With '構造体をコレクションに格納 gcolAddData.Add gAddData 普通にAddしてしまう方法なのですが、これでは駄目なのでしょうか。 方法があるのであれば教えて頂けると嬉しいです。 また、これは念の為の確認としてお聞きしたいのですが、 コレクションに追加した構造体を受け取りたい時は 以下のようにSet文で構わないですよね? Dim tmpAddData As gcolAddData Set tmpAddData = gcolAddData.Item(0) 何分、まだこの段階まで進めていない状態ですので……(汗 どうぞよろしくお願いします。

  • C++、クラスメンバの構造体配列の初期化について

    クラスのメンバに構造体の配列を持っていて、その構造体はfloat値を4つ持ってます。 私はいつもメンバ変数の初期化はコンストラクタでしています。 クラス生成時に全てのfloatを0で初期化したいのですが、これはコンストラクタでfor文を回すしかないのでしょうか? 一文で初期化することは出来ないのでしょうか? 話は少し変わってしまいますが、今思ったのですがコンストラクタで値を決めるのは初期化じゃなくて代入と呼ぶのですかね? ご助力よろしくお願いします。

専門家に質問してみよう