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 …
'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
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) Excel VBA 複数ブックシートごとにデータを統合する方法について 4 2022/05/20 14:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
エクセルでXY座標に並べられた...
-
CheckBoxの配列化
-
Excel2010のinputboxで複数デー...
-
定数配列の書き方
-
VBAでMODE関数をつくる
-
Dir関数で読み取り順を操作でき...
-
VBA ReDim と ReDim Preserve ...
-
VB6のメモリ解放に関して
-
excel vbaの配列なんですが・・・
-
C#でbyte配列から画像を表示さ...
-
複数のtextboxの処理を一括で行...
-
配列のペースト出力結果の書式...
-
構造体配列内の文字列検索のよ...
-
.NET 文字コードの変換
-
VB6からの移行したいけど、VB.N...
-
countif/sumifのようなVBA関数
-
EXCEL VBA 配列デー...
-
テキストボックの文字を一行ず...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
Excel2010のinputboxで複数デー...
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
VBAで配列引数を値渡しできない...
-
C++で作成したDLLにVBAから配列...
-
構造体配列の特定のメンバーをF...
-
OutOfMemoryExceptionの回避策...
-
大量の変数を定義するにはどう...
-
VBAでMODE関数をつくる
-
VBScriptでCSVファイルを読み出...
-
定数配列の書き方
-
Segmentation Fault (メモリ制限?)
-
Excelのメモリ(配列)の上限は2G...
-
Redim とEraseの違いは?
-
CheckBoxの配列化
-
配列の中の最大値とそのインデ...
おすすめ情報