• ベストアンサー

VB2012でオブジェクト配列が使えますか?

Visual Studio 2012 に含まれる Visual Basic で昔の Visual Basic 6のように、オブジェクト配列は使えないのでしょうか? 即ち Object 型で定義した配列に複数の Object を代入し、特定のプロパティーを全て同じ値にしてしまうようなことが出来れば、処理が簡単になるので便利です。色々試してみたのですが、私のレベルでは実現できないので、皆様の知識をお貸しください。

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

  • ベストアンサー
  • sora1515
  • ベストアンサー率58% (54/92)
回答No.1

VB.NET(2002~)よりオブジェクト配列(コントロール配列)は廃止されています。 .NETより書式だけは似ているが全く別物の言語と認識された方がよいです。 面倒ですが自分で書けば似たようなことは可能です。 やり方は個人でバラバラです。(プロジェクト内で統一する事が望ましいかと) http://www.vbstation.net/tips/controls.htm http://woodbook.kir.jp/vblib/netlib/ctrlarr.html

Agusuke
質問者

お礼

sora1515さん、回答有難うございます。世の中には、自分の努力で解決している人がいるのですね。 2番目に書かれている URL の方法が気に入りました。早速応用してみます。 有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • [Smarty] register_objectでの配列の扱い

    register_objectメソッドでテンプレートファイルに渡した配列にアクセスする方法がわかりません。 //PHPファイル register_object('data', $obj, 'array') //tplファイル 配列arrayの第一データは、{obj->array[0]}です。 //エラー 配列arrayの第一データは、{obj->array.0}です。 //エラー Smartyマニュアルに、register_objectメソッドについて、 『それはとてもセキュアで、 登録されたオブジェクトはいくつかのメソッドやプロパティを制限する事が出来ます。 しかし繰り返しの処理やオブジェクトの配列への割り当て等の事が出来ません。』 とありますが、これはregister_objectメソッドを使ってオブジェクトを渡す場合、配列にはアクセスできないということなのでしょうか? もし、そうであればassignを使うしかないのでしょうか?register_objectで書くほうがスマートなので、可能であればそちらを使いたいと思っています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • VBは、コピペを繰り返して規定のオブジェクトをいじっていくもの?

    VBは、コピペを繰り返して規定のオブジェクトをいじっていくもの? VBはクラスライブラリを、コピペを繰り返して規定のオブジェクトをいじっていくものですか? VBからフォームアプリケーションの作成を選ぶと、Form1というウィンドウが1つ生成されます。 これを規定のオブジェクトと呼んでいます。 その時点で、複数のオブジェクトがすでに存在しており、隠れて存在しています。 謎1)既に生成されている規定のオブジェクトはどうやって確認できる???    どんなオブジェクトが存在しているのか知りたい!!! オブジェクトに独自の値を持たせるには、インスタンス(実体化)して、 そのオブジェクトに値を入れていくのが、Visual Basicのプログラミング方法です。 どんな隠れオブジェクトが存在するかは、クラスライブラリを見て、使ってくれという感じです。 それでクラスライブラリには、(宣言)と(使用法)が載っていますが、 使うには、それに記載されているアセンブリのXXX.dllをimportsしてから、使用法のコードをコピペします。 ただ、(宣言)はなにに使うのか謎のままですが、 こうしてコピペを繰り返して規定のオブジェクトをいじっていく解釈で合っていますか? 謎2)クラスライブラリの宣言はいつコピペする??? ここでいう解釈は、Visual Studio 2005での開発としての解釈です。

  • objectから数値を取り出すには?

    flashMX2004のactionscriptについてです。 あるユーザー定義関数の中で作った変数をあとから利用しようとしても、 その中身自体はパスを指定して参照できるのですが、 その中身を用いた演算や、ほかの変数に値を代入することがどうしてもできず、困っています。 具体的には、まず、ユーザー定義関数A内で配列haiAおよびhaiBを定義して、 そこにそれぞれ1~10の重複しないランダムな数字を格納しています。 そして別のユーザー定義関数B内で別の配列haiCを用意して、 for文を使いhaiC[i]=haiA[i]+haiB[i]を実行したいのですが、 これを記述してもこの時haiAおよびhaiBがobject型(typeofによる)であるためか、 うまく演算をしてくれません。trace(haiC)としても、NaNが返ってきます。 trace(haiA)だとちゃんと数値が出力されるのですが、 これを使った演算などのみうまくいかない状態です。 配列を定義した直後に適当な数値を代入して演算してみるとうまくいくので、 object型とやらになっているのは ランダム生成&代入のプロセスに原因があるような気がするのですが、よく分かりません。 いまいち概念を理解しておらず、わかりにくい説明で大変恐縮ですが、 お気づきの点等ありましたらアドバイスよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 配列の変換

    Cで書かれている配列の static GLfloat A [8][3]={ {-5.0,-8.0,-5.0},{-5.0,8.0,-5.0}, {45.0,8.0,-5.0},{45.0,-8.0,-5.0}, {-5.0-8.0,5.0},{-5.0,8.0,5.0}, {45.0,8.0,5.0},{45.0,-8.0,5.0}, }; をObject Pascalの配列に変換したいです。多分、 A : array[X..Y] of GLfloat = (x,y,z,r); の形になると思うのですが、X,Y,x,y,z,rに入る値が分かりません。 (GLfloatはOpenGLの型定義です。Cでいうところのfloat) 分かる方いらしたら教えてください。

  • VBAでオブジェクトの配列の配列の削除をすると動作異常になります

    VBA(Excel2000)でオブジェクト指向のお勉強をしておりますが、ミスか言語仕様か分からないトラブルがあり、困っております。 簡単な碁(碁盤を再現し、活き死に程度を判定する)のプログラムを作成していますが、クラス石の配列であるクラス群を作成し、更にクラス群の配列を石の黒・白別に標準モジュールで定義しています。一塊の石の群が死んでいると判定した時、その群を削除しようとするのですが、redim preserve 群の配列(添字-一番最後の)を実行すると、群の配列全体にアクセスできなくなってしまいます。redimする前に、Nothingを代入するとか、もとの群(石の配列)にNothingを代入してからredimするとかしてみましたが、事態は変わりませんでした。 仕様なのか、勘違いしているのか、クラスの使い方が分かっていないのか..アドバイスお願いします。

  • [VB.net] StringからByte配列への変換

    皆さんこんばんは。 最近VB.NET2000でVisual Basicをはじめたのですが、どうにもString型の値をByte配列へ変換するやり方が分かりません。 VB6.0だとByte配列にStringを代入するだけでいいそうなのですが、.NETで代入しようとすると『型"String"の値を"Byteの1次元配列"に変換できません』というビルドエラーが表れてしまいます。 CByte( Mid(str,i,1) ) CLng( Mid(str,i,1) ) 他にも上記コードのように一つずつ変換しようと試みたのですが、String中のある文字がワイドバイトらしく、System.InvalidCastExceptionが表れてしまいます。 ("『"を上下反転したような文字) ワイドバイトのStringを1バイトずつ区切ってByte配列やLong配列へ格納する手法というものはありませんでしょうか。 よろしくお願いします。

  • 二次元配列について

    二次元配列が確保(?)されてなくて困っています。 プログラム内で、以下のように宣言するのですが、 #define MM 1025 //プログラム6行目 #define NN 10 //7行目 double y[MM][NN]; //17行目 y[0][0] = 3.0; //28行目 Visual Studio.NET のデバッグツールの「ウォッチ」で、 y[0][0]に代入された値を確認しようとすると、 エラー:インデックス'0'は、ポインタ/配列'y'の範囲外にあります と、表示され、中身を確認することができません。 それどころか、プログラムの後半98行目を境に、 y[0][0]の値が上書きされてしまいます。 x[k] = x[0] + k*h; //98行目 ここから、察するにメモリがちゃんと確保されていないと、 思うのですが、どうすればいいかわからず、困っています。 どなたかご教授をお願いいたします。 環境 OS : Windows XP 開発環境 : Visual Studio.NET

  • VB6→VB2005アップグレードの際のエラー

    VBを勉強中です。段階としては書籍やサイトの見本プログラムを いくつか真似て作っているところです。 質問ですがVB6で作られたプログラムのバージョンアップを 行っています。VS2005を使いアップグレードを行った際 UPGRADE_WARNINGが発生し、デバッグできない状態です。 エラーを潰してデバッグしたいのですが、どう直して良いのか 教えて下さい。 "配列型の次元数が異なるため、型 'Object の 2 次元配列' の値を 'Object の 1 次元配列' に変換できません。" 構文は以下の通りです。 Public Sub Sort(ByRef Ar() As Object, ByRef rs As Integer, ByRef cs As Integer, ByRef Re As Integer, ByRef ce As Integer, ByRef keyc As Integer) Dim i As Integer Dim j As Integer Dim k As Integer Dim aa As Object For i = rs To Re - 1 For j = i + 1 To Re 'UPGRADE_WARNING: オブジェクト Ar(j, keyc) の既定プロパティを解決できませんでした。 'UPGRADE_WARNING: オブジェクト Ar(i, keyc) の既定プロパティを解決できませんでした。 If Ar(i, keyc) > Ar(j, keyc) Then For k = cs To ce 'UPGRADE_WARNING: オブジェクト Ar(i, k) の既定プロパティを解決できませんでした。 'UPGRADE_WARNING: オブジェクト aa の既定プロパティを解決できませんでした。 aa = Ar(i, k) 'UPGRADE_WARNING: オブジェクト Ar(j, k) の既定プロパティを解決できませんでした。 'UPGRADE_WARNING: オブジェクト Ar(i, k) の既定プロパティを解決できませんでした。 Ar(i, k) = Ar(j, k) 'UPGRADE_WARNING: オブジェクト aa の既定プロパティを解決できませんでした。 'UPGRADE_WARNING: オブジェクト Ar(j, k) の既定プロパティを解決できませんでした。 Ar(j, k) = aa Next End If Next Next End Sub

  • JavaのObjectからintへの型変換について

    JavaのObject[][]からint[][]への型変換について、質問があります。 Jtableの表の中身を構成する要素【Object[][]】を取り出し、一部をint[][]として数字の条件と比較したいと考えております。 Object型の配列を簡単にintに変換できる方法は例えばどの様なものがあるのでしょうか? 教えていただけるとありがたいです。

    • ベストアンサー
    • Java
  • コントロールが配列かどうかを知るには?

    Visual Basic6.0(SP5)で伺いたいことがあります。 フォーム上の全てのオブジェクトを For Each文で取得しています。以下の様にです。 Dim Control As Object For Each Control In Form1.Controls If TypeOf Control Is Text Then End If Next Control このとき個々のControlがコントロール配列かどうかを知りたいのですが、どうすればよろしいでしょうか?フォーム上にはコントロール配列のオブジェクトも、コントロール配列ではないオブジェクトもあります。 Control.Indexの値を参照しようとしても、コントロール配列でない場合は 「配列ではないオブジェクトです」とエラーになります。 IsArray関数でもFalseになってしまいます。 何を行いたいかというと、そのControlがコントロール配列(Text1(0)とかText1(1)とか)かどうかを調べて、そのIndexをある関数の引数にしたいのです。全てコントロール配列だったら、Control.Indexで値を取得できるのですが。 よろしくお願いします。

専門家に質問してみよう