• ベストアンサー

VB.NETの配列とArrayListについて教えてください。

VB.NETで配列にPoint型のデータを入れたいのですが、 ArrayListのAddメソッドのように総数をあらかじめ指定せずに 順次追加するように登録していきたいのですが、 そのようなことは可能でしょうか? 最終的には Dim points As Point() g.DrawLines(Pens.Black, points) の方法で線分を描きたいのですが、 ArrayListですとデータ型が指定できないので Point型のデータを格納できないです。 良い方法がありましたら、ご教示頂けると助かります。

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

  • ベストアンサー
回答No.1

Class Q4240323A Shared Sub Main() 'ケース1 Dim Points1 As System.Drawing.Point() '何故かBC42030の警告が出るorz System.Array.Resize(Points1,2) Points1(0).X = 100 Points1(0).Y = 100 System.Console.WriteLine(Points1.Length.ToString()) Points1(1).X = 200 Points1(1).Y = 200 System.Console.WriteLine(Points1.Length.ToString()) 'http://msdn.microsoft.com/en-us/library/bb348051.aspx 'VB6をご存知ならRedim Preserveと言った方が解りやすいだろう 'VB.NETでもRedimやRedim Preserveは有効だけど, '僕はVB6時代の構文を嫌っているから.NETらしくArray.Resizeを使っているよ。 'でも一次元配列はともかく多次元配列の配列添字については良く知らないんだ。 System.Array.Resize(Points1,1) System.Console.WriteLine(Points1(0).X.ToString()) System.Console.WriteLine("======================================") '.NET 2.0やJava 1.5から取り入れられた機能としてGenericsってのがある。 'System.Collections.ArrayListがSystem.Objectを基本としていたのに対し, '.NETのSystem.Collections.Generic.List<T>は宣言時に型を記述することで '型のキャストをいちいち行わなくていいようになっている。 '例を示そう。 Dim Points2 As System.Collections.Generic.List(Of System.Drawing.Point) Points2 = New System.Collections.Generic.List(Of System.Drawing.Point)() Dim Point21 As System.Drawing.Point Dim Point22 As System.Drawing.Point Point21.X = 100 Point21.Y = 100 Point22.X = 200 Point22.Y = 200 Points2.Add(Point21) Points2.Add(Point22) 'ちなみに 'System.Collections.Generic.List<T>.ToArray() 'でArray<T>つまりTの配列を返すことが出来るようになっている。 Dim Bitmap1 As System.Drawing.Bitmap Bitmap1 = New System.Drawing.Bitmap(500,500) System.Drawing.Graphics.FromImage(Bitmap1).DrawLines(System.Drawing.Pens.Black,Points2.ToArray()) 'VistaだとProgram Filesとかに書けなくてエラー出るかも。 Bitmap1.Save("Q4240323-1.bmp") 'こんな感じ。 '何故質問文でArrayListの話が出てきているのに最初に配列の話持ってきたかっつーと。 '多分Boxing関係だと思っているが,よくは理解できていないことがあって(Q3320160) 'Points2.Item(0).X = 100 'とかは出来ず, 'Dim Point23 As Point 'Points23.X = 100 'Points23.Y = 100 'Points2.Item(0) = Point23 'とかしないといけなかったので '勧めづらかったんですよ。面白いんですけどね。・・・・A '最後に脱線してこんなのを紹介しておきましょう。 'オブジェクト初期化子(多分.NET 3.0から) Dim Points3 As System.Drawing.Point Points3 = New System.Drawing.Point() With {.X = 100,.Y = 100} System.Console.WriteLine(Points3.X.ToString()) 'Aと組み合わせると色々面白いかもしれません System.Console.ReadKey(true) End Sub End Class

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ArrayListでできませんか? Dim pts as new ArrayList() dim myPoints as Point() pts.Add( new Point( 10, 20 ) ) pts.Add( new Point( 30, 25 ) ) pts.Add( new Point( 35, 15 ) ) pts.Add( new Point( 45, 20 ) ) System.Array.Resize( myPoints, pts.Count) pts.CopyTo( myPoints ) Dim g as Graphics = PictureBox1.CreateGraphics g.DrawLines( Pens.Black, myPoints ) g.Dispose() といった具合で …

関連するQ&A

  • ArrayListへArrayListの格納

    お世話になっております。 ArrayListを2つ使用して2次元配列のような事をしようとしております。 データベースから取得したデータの1行をArrayListItemへ格納してそのArrayListItemをArrayListRecordへ格納しようとしております。 追加し終わり最後にArrayListRecordの中身を見ると全て一番最後のデータで置き換わっています。 どなたかご存知でしたらお教え願います。 ' 変数宣言 Dim objSqlDR As SqlDataReader Dim alSetItem As ArrayList Dim alSetRecord As ArrayList alSetItem = New ArrayList alSetRecord = New ArrayList ' データ取得分ループ While objSqlDR.Read()  alSetItem.Clear()  For intSetIndex = 0 To (objSqlDR.FieldCount - 1)   alSetItem.Add(objSqlDR(intSetIndex))  Next intSetIndex  alSetRecord.Add(alSetItem) End While

  • ArrayListに多次元配列

    ArrayListに多次元配列の変数を格納したのですが、取り出し方がわからず困っています。 ----------------------------------------------- String[][] str = {{"aaa","bbb","ccc","ddd","eee","fff"}, {"aaa","bbb","ccc","ddd","eee","fff"}, }}; ArrayList array = new ArrayList(); array.add(str[0]); array.add(str[1]); ----------------------------------------------- 上記の場合で、str[0][2];を取得する方法がわかりません。 java初心者なのでおかしな質問かもしれませんが、宜しくお願いします。

    • ベストアンサー
    • Java
  • ArrayListの初期値に二次元配列を設定したい(VB2005)

    下記は、aryhogeにTextBoxオブジェクトを格納する処理です。 ---------------------------------------- 'a) Dim hoge()() As TextBox = _       {New TextBox() {txta01, txtb01, txtc01}, _       New TextBox() {txta02, txtb02, txtc02}, _       New TextBox() {txta03, txtb03, txtc03}} Dim aryhoge As New ArrayList    'b) aryhoge.Add(hoge(0)) aryhoge.Add(hoge(1)) aryhoge.Add(hoge(2)) ---------------------------------------- (a)を(b)の初期値として設定するにはどのようにすればよいか、ということが質問内容です。 試しに(b)の部分を以下のようにしてみましたが、「1次元配列の値を変換できない」とのエラーが出ました。 Dim aryhoge As New ArrayList(New TextBox() {hoge(0), hoge(1), hoge(2)}) どうぞよろしくお願い致します。

  • ArrayList で配列を扱う場合の記述方法について

    ArrayList で配列を扱う場合の記述方法について、 探しきれないのでご教授お願いします。 ArrayList list = new ArrayList(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } という箇所をArrayList<Date>listを使って書き直すのはどのようになるでしょうか。 ArrayList<Date>list= new ArrayList<Date>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } とすると、 型 ArrayList<Date> のメソッド add(Date) は引数 (String) に適用できません。 というエラーになってしまいました。

    • ベストアンサー
    • Java
  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • ArrayListのデバッグ方法について

    ArrayListで、 remove(2),Remove(3)した後に、 addすると(2)の位置へデータが 格納されるのでしょうか? ArrayList全体が現在どういう状態か、 簡単に確認する方法あったら知りたいです。

    • ベストアンサー
    • Java
  • Generic.Listに1次元配列の配列を格納したい(VB2005)

    VB2005の質問です。 変数ghogeにString型の1次元配列の配列を格納したいと考えています。 ----------------------------------------------- 'a) Dim hoge()() As string = _       {New string() {"a1", "b1", "c1"}, _       New string() {"a2", "b2", "c2"}, _       New string() {"a3", "b3", "c3"}} Dim ghoge As New Generic.List(of )   'b) MessageBox.Show(ghoge(1)(1))      ' "b2"と表示したい ----------------------------------------------- 質問内容は、(a)を(b)の初期値として設定するにはどのようにすればよいか、ということです。 (b)がGeneric.ListでなくArrayListの場合だと、   Dim ghoge As New ArrayList(hoge) でhoge配列を格納できますが、Generic.Listの場合はどのような構文にすればよいでしょうか。 現在は、下記のような処理でghogeに値を格納しています。 ------------------------------------------------------------ Dim ghoge As New Generic.List(Of Generic.List(Of String)) Dim aryhoge1 As New Generic.List(Of String)(New String() {"a1", "b1", "c1"}) Dim aryhoge2 As New Generic.List(Of String)(New String() {"a2", "b2", "c2"}) gary_hoge.Add(ary_hoge1) gary_hoge.Add(ary_hoge2) MessageBox.Show(gary_hoge(1)(1))    ' "b2"と表示される ------------------------------------------------------------ どうぞよろしくお願い致します。

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

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

  • VB2015 ListBoxの二次元配列を呼出す

    始めまして。 趣味でVBソフトを作りたいと奮闘中です。 ExcelVBAやC#の簡単ソフトを作った経験があります。 パソコン環境は、W10x64、VB2015です。 ListBoxに2次元配列で下記のように書き込み、選択した行の右側のデータ(欄2)を他のTextBoxに表示させたいのです。 下のデータを2次元配列にして読み込ませる方法と、選択した行の欄2のデータを取り込む方法を教えて頂けると嬉しいです。ListBoxのプロパティのMultiColumnはTrueにしてあります。  欄1 欄2 北海道  550 青森県  138 宮城県  230 東京都  1360 現在は次のようにしてなんとか逃げておりますが、2次元配列でスマートに出来れば嬉しいです。 書き込み ListBox1.BeginUpdate() ListBox1.Items.Add("北海道 , 550") ListBox1.Items.Add("青森県 , 138") ListBox1.Items.Add("宮城県 , 230") ListBox1.Items.Add("東京都 , 1360") ListBox1.EndUpdate() 呼び出し Dim textArray = ListBox1.SelectedItem.ToString.Split(",")  Dim Jinko As Single = Single.Parse(textArray(1)) TextBox.Text = Jinko 宜しくお願い致します。 熊谷

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

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

専門家に質問してみよう