タイトル | : 1つのCSVファイルから2つプログラムを動かす。vb.net |
記事No | : 11947 |
投稿日 | : 2017/12/11(Mon) 23:03 |
投稿者 | : ライラ |
vb.netを使用して1つのCSVファイルから次駅案内や路線図の表示といった統合した2つプログラムを動かして自作のトレインビジョンを作成しています。
統合する前は動いていたのですが、統合した後に路線図の駅名が表示されなくなってしまいました。どうすればいいのか教えてください。 Imports System.Drawing '図形や線を描画できる基本的なグラフィックス機能を追加 Imports System.Drawing.Drawing2D '上記コードの2 次元高度な機能
Public Class Form1 Dim canvas As Bitmap 'canvas を画像とその属性のピクセルデータを扱うクラスBitmapで宣言する Dim g As Graphics 'g を描画クラスGraphicsで宣言する Dim colower As Brush = Brushes.Red 'colowerを四角形、楕円、扇形、多角形を塗りつぶすクラスBrushで宣言して同時に塗りつぶしておく最初の色を赤に設定する Dim fnt As Font 'fntをテキストの特定の書式を定義するクラスFontで宣言する。 Dim line As Integer = 4 'cを整数型Integerで宣言してそれと同時に4を代入する
Private Sub Button1_Click(ByVal sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim objFile2 As New System.IO.StreamReader("Z:\traindata\種別等.csv", System.Text.Encoding.GetEncoding("shift_jis")) 'ファイルを指定して読み込むためのオブジェクト Dim strLine2 As String 'ファイルから読み取った全駅名の文字列を格納する Dim strTemp2() As String 'strLine2からデータを受け取り、配列にする Dim strData2 As String 'strTemp2の配列したデータを受け取る Dim Lineno2 As Integer 'CSVファイルから読み込みたい列の値を格納する Dim station As Integer 'CSVファイルから読み込みたい複数の行の値を格納する Dim stationlist As String 'strTemp2とstationのファイルから読み込んだ文字列を受け Dim linesta As Integer 'aを整数型で宣言をしてそれと同時にstrTempの配列を指定して、文字の最大値を返す。
Lineno2 = 1 strLine2 = objFile2.ReadLine() 'objFile2に1行分の文字を読み込んで、strLine2に格納する While (strLine2 <> "") 'strline2が空白""と等しくない限り処理を続ける strTemp2 = Split(strLine2, ",") 'strLine2とカンマで区切られたファイルの文字列から配列を作成してstrtemp2に格納する For intCnt = 0 To UBound(strTemp2) 'カウンタintcatが0からstrtemp2の添字の最大値以下である間,処理を繰り返し行う strData2 = strData2 + strTemp2(intCnt) 'strData2にstrTemp1の配列カウンタintcatとstrData2を足して代入する Next If Lineno2 = 2 Then 'Lineno2に格納したCSVファイル内の空白を除いた文字列から2列目を指定して読み込む TextBox4.Text = strTemp2(0) '列に続いて文字列から行の番号を指定してその内容の文字をテキストボックスやラベルに入れる(号車を示すTextBox4の内容)
'ElseIf Lineno2 = 2 Then 'Lineno2に格納したCSVファイル内の空白を除いた文字列から1列目を指定して読み込む stationlist = "" ' stationlistの文字列をリセットして空欄にする For station = 4 To 37 '複数の駅名の行を指定してstationに格納する stationlist = stationlist + strTemp2(station) 'stationに格納されている指定された駅名の文字列をstationlistで呼び出す。 Next
stationlist = "停車駅は" + stationlist + "です" '呼び出された駅名の文字列を文章にして表示させる。 TextBox5.Text = stationlist 'TextBox5にstationlistを代入する
End If
canvas = New Bitmap(PictureBox1.Width, PictureBox1.Height) 'canvas に初期化して高さと幅を設定したピクチャーボックスを格納する。 g = Graphics.FromImage(canvas) linesta = UBound(strTemp2) fnt = New Font("MS UI Gothic", 20) 'テキストの特定の書式を設定できるクラスFontを初期化して文字スタイルをMS UI Gothicに、大きさを20に設定してfnt に格納する。 station2(strTemp2(line), -110) 'stationに配列strTempに配列c, と座標-110を配列にして挿入する If line + 1 <= linesta Then 'aはc+1より大きければ上記と同じ配列strTempに配列c+1, と座標0をstationに挿入して1つ目の駅名を出す。以降iに足す数字を1増やしながら処理をする。 station2(strTemp2(line + 1), 0) '2つ目の駅名を出す。 End If If line + 2 <= linesta Then station2(strTemp2(line + 2), 100) '3つ目の駅名を出す。 End If If line + 3 <= linesta Then station2(strTemp2(line + 3), 200) '4つ目の駅名を出す。 End If If line + 4 <= linesta Then station2(strTemp2(line + 4), 300) '5つ目の駅名を出す。 End If If line + 5 <= linesta Then station2(strTemp2(line + 5), 400) '6つ目の駅名を出す。 End If strLine2 = objFile2.ReadLine() 'strLine2にobjFile2の配列を読み込む Lineno2 = Lineno2 + 1 'Lineno2にLineno2と1を足して代入する End While
g.FillRectangle(Brushes.Orange, 10, 20, 700, 80) '座標を決めて塗りつぶしたオレンジ色の長方形を描画する(塗りたい色,x座標,y座標,幅,高さ) g.FillEllipse(Brushes.White, 70, 25, 70, 70) '座標をそれぞれ決めて塗りつぶした白い円を6個描画する g.FillEllipse(Brushes.White, 170, 25, 70, 70) g.FillEllipse(Brushes.White, 270, 25, 70, 70) g.FillEllipse(Brushes.White, 370, 25, 70, 70) g.FillEllipse(Brushes.White, 470, 25, 70, 70) g.FillEllipse(Brushes.White, 570, 25, 70, 70) Dim points As Point() = {New Point(710, 100), '三角形を描画する座標を決める New Point(710, 20), New Point(790, 60)} '多角形を描画する g.FillPolygon(Brushes.Orange, points, FillMode.Alternate) '塗りつぶす色をオレンジに設定する g.TranslateTransform(190, 0) 'gに座標を 190, 0に指定してオブジェクトを変換する。 '多角形を描画する
PictureBox1.Image = canvas 'ピクチャーボックスにcanvasを代入する。
End Sub Private Sub station2(stationname As String, pointer As Integer) 'stationイベントを作成して、横の括弧の中にstationnameは文字列型で、pointerは整数型で宣言をして文字を書くところとそれを表示する場所を作る。
Dim stacount As Integer = stationname.Length 'n を整数型で宣言をしてそれと同時に文字数属性のstationnameを代入する。 Dim staname As String = "" 'm を文字列型で宣言をしてそれと同時に空白を代入する。 For i = 0 To stacount - 1 'i が 0 からn – 1の間で繰り返し処理を行う staname = staname & stationname.Substring(i, 1) 'mにmと駅名とi文字目を追加する。 Next Dim stfom As New StringFormat() 'stfomを文字列の書式を設定する方法を指定できるオブジェクトStringFormatで宣言をして配列を初期化する stfom.FormatFlags = StringFormatFlags.DirectionVertical 'テキスト文字列を縦方向位置合わせして、stfomに書式情報を格納する fnt = New Font("MS UI Gothic", 20) 'テキストの特定の書式を設定できるクラスFontを初期化して文字スタイルをMS UI Gothicに、大きさを20に設定してfnt に格納する。 g.DrawString(staname, fnt, Brushes.Black, pointer, 110, stfom) 'g に宣言しておいたmとfnt、 pointer、 stfomそして 、描画する色を黒にして座標を110に設定して文字列を描画する
End Sub
|