VB.NETのメモ


変数

Const EDIT_MODE As Short = 1	'定数
Dim Count As Integer = 0
'配列(Array)の宣言はカッコを前に付ける方法と後ろに付ける方法がある
Dim str() As String
Dim str As String()
'宣言後に代入するときはNewで代入する
str = New String() {"みかん", "りんご", "バナナ"}
'宣言時にも書ける。
Dim str() As String = New String() {"みかん", "りんご", "バナナ"}
'New String()を省略することもできる
Dim str() As String = {"みかん", "りんご", "バナナ"}
'宣言部分も省略できる(暗黙的な型指定)がコンパイルオプションによっては使えない
Dim str = {"みかん", "りんご", "バナナ"}
'配列の宣言と代入
Dim list(10) As Integer
For i = 0 To 9
	list(i) = 123
Next
ReDim list(5)	'配列の数の再定義
'List型(ListOfコレクション)の宣言と追加と取り出し
Dim list As New List(Of Integer)
list.Add(123)
list.Add(456)
list.Add(789)
For Each value As Integer In list
	wk = value
Next
'宣言と同時に初期設定
Dim list As New List(Of String)(New String() {"aaa", "bbb", "ccc"})
'配列型に変換
Dim arrayData() As String = list.ToArray()
'ArrayList型の宣言と追加
Dim list = New ArrayList()
list.Add(1)
list.Add("北海道")	'object型なので何でも入るがArrayListは遅い
'Hash型
Dim ht As Hashtable = New Hashtable
ht.Add("北海道", "札幌市")	'存在する場合はエラー
ht("沖縄県") = "那覇市"
'Dictionary型の宣言と追加
Dim dic As New Dictionary(Of String, String)
dic.Add("北海道", "札幌市")
dic("沖縄県") = "那覇市"
wk = dic("北海道")
'Dictionary型にFromで初期設定
Dim dic As New Dictionary(Of String, String) From { {"北海道", "札幌市"}, {"沖縄県", "那覇市"} }
'クラスの配列をList型で宣言
Imports System.Collections.Generic
Public sampleList As New List(Of sampleClass)
sampleList.Add(New sampleClass(id, name))



日時

DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")	'現在日時
Dim dt As DateTime = New DateTime(2019, 10, 10, 12, 34, 56, 123)	'指定日時
Dim basetime As DateTime = DateTime.Parse("2019/10/01")	'指定文字列から日時へ
basetime.AddDays(10)	'加算
wk = String.Format("yyyyMMdd", "2020/12/31")	'yyyy/mm/ddをyyyymmddに変換
wk = wk.ToString("0000/00/00")	'yyyymmddをyyyy/mm/ddに変換
'yyyy/mm/ddから来月の月初日のyyyy/mm/dd
wk = DateTime.Parse("2020/12/31").AddMonths(1).ToString("yyyy/MM/01")
'yyyy/mm/ddから当月の月末日のyyyy/mm/dd
wk = DateTime.Parse(DateTime.Parse("2020/12/01").AddMonths(1).ToString("yyyy/MM/01")).AddDays(-1).ToString("yyyy/MM/dd")
Now.ToOADate * 100000	'現在秒(OLEオートメーション日時)
Now.Ticks / 10000000	'現在秒(ナノ秒)

文字列

Dim wk As String = str1 & str2	'文字列を連結
Dim wk As String = str.Substring(10, 5)	'11文字目から5文字
Dim wk As String = str.Substring(10)	'11文字目から後ろ全部
str.IndexOf("探す文字列")	'文字列を検索し見つかった場所を返す
'StringBuilderで構築して戻す
Dim sb As New System.Text.StringBuilder()
sb.Append(str1)
sb.Append(str2)
Dim wk As String = sb.ToString()
wk = wk.PadLeft(4, "0"c)	'ゼロ詰め
wk = CInt(str).ToString("0000")	'ゼロ詰め
wk = String.Format("{0:#,0}", wk)	'カンマ揃え
wk = wk.Replace("あ", "い")	'文字列変換

ファイル

'1行ずつ読み込む
Dim sr As New System.IO.StreamReader("test.txt", System.Text.Encoding.GetEncoding("UTF-8"))
While sr.Peek() > -1
	wk=sr.ReadLine()
End While
sr.Close()
'追加で1行書き込む
Dim sw As New System.IO.StreamWriter("test.txt", True, System.Text.Encoding.GetEncoding("UTF-8"))
sw.Write(str)
sw.Close()
'ファイルの存在確認
If System.IO.File.Exists(str) Then
End If
'フォルダの存在確認
If System.IO.Directory.Exists(str) Then
End If
System.IO.File.Delete("test.txt")	'ファイル削除

繰り返し

'0から10まで繰り返す
For i = 0 To 10
Next
'配列の文字列を取り出しながら繰り返す
For Each wk In list
	MsgBox(wk)
Next



エラー処理

'エラーをキャッチしてもしなくても最後にストリームをクローズ
Try
Catch ex As System.Exception
	Return ex.Message
Finally
	sr.Close()
End Try
'エラーハンドラ
On Error GoTo ErrorHandler
ErrorHandler:
ErrorMessage()



'表形式で扱うDataGridView
RowIndex = DataGridView1.CurrentCell.RowIndex	'カレントの行番号
ColumnIndex = DataGridView1.CurrentCell.ColumnIndex	'カレントの列番号
wk = DataGridView1.Rows(RowIndex).Cells(ColumnIndex).Value	'指定行列の値を取得
DataGridView1.Rows.Add(ColumnName, ColumnType, ColumnSize)	'行の追加
DataGridView1.CurrentCell = Nothing	'DataGridViewの青カーソルを未選択にする

カーソル

Me.Cursor = System.Windows.Forms.Cursors.WaitCursor	'マウスカーソルを砂時計にする
Me.Cursor = System.Windows.Forms.Cursors.Default
TextBox1.Focus()	'カーソル位置を変更

操作イベント

'リターンをタブに変換
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyData = Keys.Return or e.KeyData = Keys.Down Then
        SendKeys.SendWait("{TAB}")
    End If
End Sub
'カーソル位置のテキストボックスだけ背景色を変える
Private Sub TextBox1_Enter(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles TextBox1.Enter
    TextBox1.BackColor = System.Drawing.Color.Yellow
End Sub
Private Sub TextBox1_Leave(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles TextBox1.Leave
    TextBox1.BackColor = System.Drawing.SystemColors.Window
End Sub

処理ブロック

#Region "〇〇の処理"
Public Function GetUserName(ByVal UserID As Integer, Optional ByVal server As Integer = 0) as String
End Sub
#End Region

デバッグ

System.Diagnostics.Debug.WriteLine(wk)
#If DEBUG Then
    Console.WriteLine("デバッグ中でーす")
#End If

画面関係

'コンボボックスの初期化
cmbName.Items.Clear()
cmbName.Text = ""
'フォームを画面中央に移動
Me.SetDesktopLocation((System.Windows.Forms.Screen.GetWorkingArea(Me).Width - Me.Size.Width) / 2, (System.Windows.Forms.Screen.GetWorkingArea(Me).Height - Me.Size.Height) / 2)
'表示位置
form1.Location = New Point(0, 0)
'自分のフォームを閉じる
Me.Close()
'最前面へのポップアップ
MessageBox.Show(Me, "メッセージ", "タイトル", MessageBoxButtons.OK, MessageBoxIcon.Information)
プログレスバー
ProgressBar1.Value = 0
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = TargetCount
For i = 0 To TargetCount
	ProgressBar1.Value = i
Next



ADO.NET(SQL Server)

Imports System.Data.SqlClient
Dim con As New System.Data.SqlClient.SqlConnection
Dim strSQL As String = ""
Dim dr As SqlClient.SqlDataReader
Dim serverName As String = "localhost\sqlexpress"
Dim dbName As String = "DBNAME"
Dim userId As String = "username"
Dim password As String = "password"
con.ConnectionString =
"Data Source = " & serverName &
";Initial Catalog = " & dbName &
";User ID = " & userId &
";Password = " & password
con.Open()
Dim command As System.Data.SqlClient.SqlCommand = con.CreateCommand()
strSQL = "SELECT * FROM USERDATA WHERE USERID = 1 "
command.CommandText = strSQL
command.Connection = con
dr = command.ExecuteReader()
While dr.Read()
    If IsDBNull(dr("USERNAME")) Then
        USERNAME = "";
    Else
        USERNAME = dr("USERNAME")
    End If
End While

ADO.NET(MDB)

Imports System.Data.OleDb
Dim con As OleDbConnection = New OleDbConnection
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"
con.Open()
Dim sql As String = "SELECT * FROM [staff]"
Dim dt As New DataTable
Dim sqlCommand As New OleDbCommand(sql, con)
Dim adapter As New OleDbDataAdapter(sqlCommand)
adapter.Fill(dt)
adapter.Dispose()
sqlCommand.Dispose()
Msgbox(dt.Rows(0).Item("name"))
con.Close()

その他

'リターンをタブに変換
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyData = Keys.Return or e.KeyData = Keys.Down Then
        SendKeys.SendWait("{TAB}")
    End If
End Sub
'カーソル位置のテキストボックスだけ背景色を変える
Private Sub TextBox1_Enter(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles TextBox1.Enter
    TextBox1.BackColor = System.Drawing.Color.Yellow
End Sub
Private Sub TextBox1_Leave(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles TextBox1.Leave
    TextBox1.BackColor = System.Drawing.SystemColors.Window
End Sub






桜の扉