tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル1つのCSVファイルから2つプログラムを動かす。vb.net
記事No11947
投稿日: 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 &#8211; 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

[ツリー表示へ]
タイトルRe: 1つのCSVファイルから2つプログラムを動かす。vb.net
記事No11948
投稿日: 2017/12/20(Wed) 12:20
投稿者shu
>
> 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に指定してオブジェクトを変換する。
> '多角形を描画する
>
この部分を実行されなければ表示されますでしょうか?
だとしたら、描画順番を変えればよいです。(文字を描画した上に四角や円を塗りつぶしで描画しているだけだと思います。)

[ツリー表示へ]