- ベストアンサー
VB2010でグラフ表示について
Visual Basic 2010でのプログラミングがわからないので教えて下さい。 自分は、今回がプログラムを初めて行う初心者でして、テキストファイルを読み込むことはできたのですが、サンプルコードを改変してつくったので言語についてはあまり理解できていません。 知識不足なのですが、急いで作らなくてはいけないのでよろしくお願いします。 テキストファイルから必要な部分だけを読み込む→読み込んだ数値を使ってグラフを表示するというアプリケーションを作りたいのですが、どのようにすればよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは もうすでに解決済みでしょうか? >テキストファイルを読み込むことはできたのですが、 ファイルを読み込むことは出来たみたいですので、ファイルの部分は別クラスにしますのでこちらはわからなければ無視してください。 >読み込んだ数値を使ってグラフを表示する こちらは、チャートコントロールを使うと簡単ですが、基本ということでグラフはPictureBoxに表示します、Formに直接表示してもかまいません。 #Bitmapを使って描画の入れ物を作成します。 #Graphicsの変数を定義します Dim g As Graphicsみたいに #グラフに使用する文字のフォントを決めます。 Dim fnt As Font #ループを使用してグラフを表示します。 DrawStringを使用して文字を表示します。 g.DrawString(文字列、フォント、色、x座標、y座標) FillRectangleを使用して四角の塗りつぶしたグラフを作成します。 g.FillRectangle(色、表示するx座標、表示するy座標、四角の幅、四角の高さ) 以下サンプルです。 Imports System.Drawing Imports System.Windows.Forms Public Class Form1 Dim dt As New dodata 'クラスdodataをインスタンス Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown dt.readtxt() 'ファイルの読み込み '画像の入れ物を作成 Dim spc As New Bitmap(PictureBox1.Width, PictureBox1.Height) '画像の変数を作成 Dim g As Graphics = Graphics.FromImage(spc) 'フォントの作成 Dim fnt As Font = New Font("MSゴシック", 15, FontStyle.Bold) 'ループでグラフを作成 dt.m.CountはClass dodataのプロパティのリストの数 For mcnt As Integer = 0 To dt.m.Count - 1 '月を作成 dt.m(mcnt)はClass dodataのプロパティのリストから文字列を取得 g.DrawString(dt.m(mcnt), fnt, Brushes.Navy, 10 + mcnt * 50, 300) '棒グラフの作成 dt.nu(mcnt)はClass dodataのプロパティのリストから数値の取得 g.FillRectangle(Brushes.Red, 15 + mcnt * 50, 250 - (10 * CInt(dt.nu(mcnt))), 20, (10 * CInt(dt.nu(mcnt)))) Next '各変数を処理 fnt.Dispose() g.Dispose() 'PictureBox1に画像を表示 PictureBox1.Image = spc End Sub End Class Public Class dodata Shared _m As New List(Of String) 'リストの作成 Shared _nu As New List(Of String) 'リストの作成 'テキストファイルの読み込み Public Sub readtxt() _m.Clear() 'リストのクリア _nu.Clear() 'リストのクリア Dim reader As New IO.StreamReader("C:\test\test.txt", System.Text.Encoding.GetEncoding("shift_jis")) Dim line As String 'ファイルの一行 Dim item() As String '各行の配列 line = reader.ReadLine '一行読む Do Until line Is Nothing '最後の行まで読む item = line.Split(",") '各行をカンマで区切る _m.Add(item(0)) '_mにitem(0)をAddする _nu.Add(item(1).Replace("件", "")) '_nuにitem(1)をAddする line = reader.ReadLine '一行読む Loop reader.Close() End Sub 'プロパティにリストごと読み取る Public ReadOnly Property m As List(Of String) Get Return _m End Get End Property 'プロパティにリストごと読み取る Public ReadOnly Property nu As List(Of String) Get Return _nu End Get End Property End Class
その他の回答 (1)
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
すいません、読み込んだテキストファイルの内容を記入し忘れました。 3月,21件 4月,10件 5月,11件 6月,5件 7月,8件 8月,15件 上記のようになっています。
お礼
大変丁寧な回答,参考にさせていただきました. ありがとうございます. 非常に多くの情報がつまっていたので自分で理解するのに時間がかかってしまいましたが、少しずつ勉強していきます. それと,追加で質問になってしまうのですが FileOpen(fileNo, fileName, OpenMode.Input) というメソッドでファイルを読み込もうとしているのですが,このメソッドでも同じようにできるのでしょうか. 質問がわかりにくくですいません.よろしくおねがいします.