• ベストアンサー

VBのコントロール配列を二次元配列にする方法

タイトル通りです。 テキストボックスなどをコントロール配列で持つときに二次元配列で持つ方法はないでしょうか? ご回答の方、宜しくお願いします。

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

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

コントロールのIndexプロパティを利用する方法では二次元配列はできません。 しかし、変数としての二次元配列ならできます。 Dim TextBoxes(3, 10) As TextBox などとすると、テキストボックスの多次元配列ができます。 ただし、この変数にはインスタンスがないので、インスタンスは別に作成してやる必要があります。 以下に例を示します。 名前がTexts、Indexが0のTextBoxを配置します。 フォームモジュールに以下を貼り付けます。 Option Explicit Private TextBoxes(3, 10) As TextBox Private Sub Form_Load() On Error Resume Next Dim N As Long, M As Long, T As Long For N = 0 To 2 For M = 0 To 9 T = N * 10 + M Load Texts(T) 'Load Texts(0)はエラーだが無視される Set TextBoxes(N, M) = Texts(T) TextBoxes(N, M).Left = N * 1320 TextBoxes(N, M).Top = M * 300 TextBoxes(N, M).Visible = True Next M Next N End Sub Private Sub Texts_Click(Index As Integer) MsgBox "これは(" & (Index \ 10) & ", " & (Index Mod 10) & ")です" End Sub この方法を使う場合、TextBoxes(N, M)のIndexプロパティはN * 10 + Mを示すので、注意が必要です。

Mizyu
質問者

お礼

ありがとうございます。これが知りたかったのです。 Dimで宣言すれば二次元配列にできそうだ、ということには気づいていたのですが。 インスタンスの生成が足りなかったのですね。ありがとうございました。

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

その他の回答 (2)

  • gould09
  • ベストアンサー率33% (196/589)
回答No.2

Mizyuさん、こんにちは。 コントロールを二次元配列にする方法は知りません。 ただ、二次元配列を添え字につかったらにた処理が出来ると思います。 dim iArry(10,10) as integer iArry(1,1)=1 iArry(2,1)=2 ... TEXT(iArry(1,1)).TEXT = "AAAAA" TEXT(iArry(2,1)).TEXT = "BBBBB"

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

Mizyuさん、こんにちは。 コントロール配列を二次元にする方法はありません!かな? 調べ切っていないのかも知れませんが、僕は知りません。 仮想二次元にして、その都度計算されたらいかがでしょうか。 例えば 5×8 の二次元とします。 DIM TBL(40) as string for i=1 to 5 for j=1 to 8 TBL((i-1)*8 + j)="テスト" next j next i

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

関連するQ&A

  • vb2008 コントロール配列

    VB6からVB2008へ移行を検討しているものです。 そこで質問なんですが、VB2008でコントロールの反復処理はどう処理すればいいのでしょうか? VB6の時はコントロール配列を使用して、ForNextで繰り返せばそれらしいことはできました。VB2008はコントロール配列がサポートされていないのでどうすればいいかわかりません。みなさんはどう反復処理を行っているのか教えていただきたいと思います。 具体的な処理として、テキストボックス1~10があり、そのテキストボックスの内容を1~10の順番で、テキストボックス11~20に格納する。以上、宜しくお願いします。

  • コントロール配列の多次元配列

    http://dobon.net/vb/dotnet/control/buttonarray.html のサイト内の、「"特定の名前" + "1から連続する数字"」という名前を持つコントロールを配列にするメソッドを使用してのコントロール配列の多次元配列の方法はどのようにすれば良いでしょう?今現在調べている最中ですがよくわかりません。よろしくお願いいたします。

  • 4次元配列を2次元配列にするには?

    多次元配列を1次元配列に組み替える方法をよく目にするのですが、4次元配列を2次元配列にする方法がわかりません。 4次元配列で表したものを連立一次方程式で解きたいので2次元配列に置き換えなければなりません。 配列の中はどういう風におけばいいのでしょうか。 よろしくお願いします。

  • VB2010でのコントロール多次元配列について

    教えてください。 実行中にコントロールを生成したいのですが、 Public Class Form1  Private myTxt(,) As System.Windows.Forms.TextBox  Me.myTxt = New System.Windows.Forms.TextBox(59, 2) {}  Dim i As Integer  Dim j As Integer  Dim h As Integer  Dim p As Integer  h = 10  p = 100  For i = 0 To Me.myTxt.GetLength(0) - 1   For j = 0 To Me.myTxt.GetLength(1) - 1    Me.myTxt(i, j) = New System.Windows.Forms.TextBox    Me.myTxt(i, j).Name = "myTxt" + i.ToString() + j.ToString()    Me.myTxt(i, j).Size = New Size(100, 30)    Me.myTxt(i, j).Location = New Point(p, h)    p = p + 100   Next j   h = h + 30  Next i  Me.myPnl.Controls.AddRange(Me.myTxt) と書くと最後の行が波線になり、 “型 'System.Windows.Forms.TextBox の 2 次元配列' の値を 'System.Windows.Forms.Control' に変換できません。”とエラーになります。 これはAddRangeは多次元配列に使用できないということなのでしょうか? 色々検索してみましたが、コントロールの生成に関する多次元配列が見つけられずに 困っていました。 最後のAddRange(Me.myTxt)をAdd(Me.myTxt(i,j))などと変えたりしても別のエラーになり、 基本的に間違っている気がしますがどこだかがわかりません。 詳しい方、宜しくお願い致します。

  • VB2005 コントロール配列について教えていただけませんか?

    現在VB2005を用いてプログラムを行なっている初心者です。 ここのサイトでVB2005ではコントロール配列は使用できないことを知りました。そこで、例えばフォーム上にTextBoxを5個配置して、各TextBoxに入力された値を配列に格納するのにはどのようにすれば良いでしょうか? data(0) = textbox1.text data(1) = textbox2.textと一つずつやるしかないでしょうか・・・ For文などを用いて簡単にできる方法を教えてください。 よろしくお願い致します。

  • VB2005でのTabPageとコントロール配列について

    今テキストボックスをコントロール配列にするために動的に作成しまして、実行時にTabPage上に表示させたいのですが、どのようにすれば表示させる事ができるでしょうか?TabPage上ではなくフォーム上になら表示させることはできました。よろしくお願い致します。

  • VB.NET2010 の多次元配列について

    すいません、教えてほしいです! VB.NET2010開発環境を利用しています。 多段配列を多次元配列に入れる方法を教えていただきたいです。 多段配列 Dim myArr1()() ↓ 多次元配列 Dim myArr2( , )

  • 2次元配列の配列

    VisualBasic.NETでプログラムを作っているのですが、2次元配列の配列で行き詰って困っています。 配列1~3を別に定義して、その2次元配列を配列Xという配列にひとまとめにしたいのですが、エラーが出てしまいます。 エラー内容は「配列初期化子の次元が少なすぎます」で、場所は配列Xの第1要素です。 配列1~3以降もどんどん配列を追加していく予定なので、なるべく以下の方法で書いていきたいのですが、解決法はないでしょうか? また、他にいい方法があればご教授ください。 ソースです。 ---------------------------------------- Public 配列1(,) As Integer = _ { _ {1, 1, 1}, _ {1, 1, 1}, _ {1, 1, 1}, _ {1, 1, 1} _ } Public 配列2(,) As Integer = _ { _ {2, 2, 2}, _ {2, 2, 2}, _ {2, 2, 2}, _ {2, 2, 2} _ } Public 配列3(,) As Integer = _ { _ {3, 3, 3}, _ {3, 3, 3}, _ {3, 3, 3}, _ {3, 3, 3} _ } Public 配列X(,)() As Integer = { _ 配列1, _     ←ここにエラーが出る 配列2, _ 配列3 _ } ---------------------------------------- 回答よろしくお願いします。

  • VB.NETでテキストボックスをコントロール配列のように扱いたいんですが

    VB.NETではコントロール配列はサポートされていませんが、TextBox1~TextBox10を配列のように扱う方法はありますか?ちなみに、以下の方法ではエラーとなりました。 Controls("TextBox" & i).Text でTextの内容を取得しようとした よろしくお願いします。

  • 3次元配列を2次元配列にする方法はありますか?

    3次元配列を2次元配列にする方法はありますか? すいません、初心者です。 オープンソースとyahooとgoogleのAPIを使って統合型メタ検索エンジンを作っています。 yahooの結果の配列は2次元配列で出せました。 $search_results[$i]["url"] google APIは1回のリクエストで8件までしか呼び出せないみたいなので、 curl_multi関数を使って複数のリクエストを同時に取得しています。 そうしたら結果の配列は三次元配列になりました。 $search_results[$id][$i]["url"] 以下googleの関数です。curl_multiの部分等、文字数の関係で省略しています。 省略した部分のソースは下記リンクにのっています。 http://phpspot.org/blog/archives/2008/02/phpapi.html function search_google($query) { $curls = array(); $search_results = array(); $i=0; $site_results = array( 'http://ajax.googleapis.com/&start=0', 'http://ajax.googleapis.com/&start=8', 'http://ajax.googleapis.com/&start=16', 'http://ajax.googleapis.com/&start=24', 'http://ajax.googleapis.com/&start=32', 'http://ajax.googleapis.com/&start=40', 'http://ajax.googleapis.com/&start=48', 'http://ajax.googleapis.com/&start=56'); foreach($curls as $id=>$c) { $searchs[$id] = curl_multi_getcontent($c);//$cが$site_resultsのリクエスト結果 curl_multi_remove_handle($mh, $c); $json=json_decode($searchs[$id]); if($json->responseStatus != 200){exit();} $responseData = $json->responseData; $results = $responseData->results; for($i=0;$i<count($results);$i++){ $title = $current_result->title; $search_results[$id][$i]["title"]= $title; } } curl_multi_close($mh); return $search_results; } 統合型メタ検索にしたいと考えているのでgoogle配列の変数[$id]同士を結合して yahooの結果と同じく $search_results[$i]["url"] のような二次元配列にしたいのですが、そのようなことは可能ですか? 本当は両方とも3次元配列にするという処理が適切だと思いますが、初心者がオープンソースを改良して使用しているので、どこを直せば3次元配列のものをうまく表示できるのかわからないのです。 わかりにくかったらすいません。どうか、よろしくお願いします。

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • B's動画レコーダー7で1時間20分の動画を録画したが、容量が足りないというメッセージが表示される。
  • 容量は8.5に変更しているが、対処法を知りたい。
  • ソースネクスト株式会社の製品・サービスに関する質問。
回答を見る

専門家に質問してみよう