描画
Dim objGraphics As Graphics
objGraphics = Me.CreateGraphics()
objGraphics.Clear(System.Drawing.SystemColors.Control)
objGraphics.DrawLine(System.Drawing.Pens.Chartreuse, 0, 0, _
Me.DisplayRectangle.Width, Me.DisplayRectangle.Height)
objGraphics.Dispose()
コレクション(Colllection)
オブジョクトの集合
−−−−−−−−−−−−−−−
プロジェクト名:Collections Example
フォームの名前(Name):fclsCollectionsExample
フォームのTextプロパティ:Collections Example
スタートアップの設定:fclsCollectionsExample
コントロール名の閲覧
Dim intIndex As Integer
For intIndex = 0 To Me.Controls.Count - 1
MsgBox("コントロール" & intIndex & "番目の名前は " & _
Me.Controls(intIndex).Name)
Next intIndex
TextChangedイベントハンドラを削除
txtEventsのMouseDownイベント
Select Case e.Button
Case MouseButtons.Left
lblMassage.Text = "左ボタンが押されました。"
Case MouseButtons.Right
lblMassage.Text = "右ボタンが押されました。"
Case MouseButtons.Middle
lblMassage.Text = "名ボタンが押されました。"
End Select
txtEventsのMouseUpイベント
lblMassage.Text = ""
Handles句
Handles オブジェクト名.イベント名
フォーム
フォーム=ウィンド
−−−−−−−−−−−−−−−
プロジェクト名:Forms Example
フォームの名前(Name):fclsExample
スタートアップの設定:fclsExample
タイトルバー:プログラムの名前。プログラムの目的。フォームの名前。
フォームのTextプロパティ:Bilding Forms Example
フォームを表示する
クラスからオブジェクトを作成する。つまり、インスタンスを作成することを、インスタンス化と呼ぶ。
フォームのインスタンスを作る構文
Dim オブジェクト変数 As New フォームクラス名()
Forms Example クリック
プロジェクトーWindowsフォームの追加
ファイル名:fclsMyNewForm.vb
Form1.vbにButton追加
Buttonコントロールのプロパティ
Name:btnShowForm
Text:フォーム表示
Location:112,112
フォーム表示
Dim frmTest As New fclsMyNewForm()
frmTest.Show()
モーダルとモードレス
モードレスは、他の操作を防げない。上記は、モードレス。
モーダルは、他のフォームが使用付加となる。下記は、モーダル。
Dim frmTest As New fclsMyNewForm()
frmTest.ShowDialog()
アンカー
コントロールの端からフォームの端までの間隔を一定に保ちながら、コントロールをフォームに配置。
−−−−−−−−−−−−−−−
プロジェクト名:Anchoring Example
フォームの名前(Name):fclsAnchoringExample
フォームのTextプロパティ:Anchoring Example
スタートアップの設定:fclsAnchoringExample
タブオーダーの設定
コントロールから次のコントロールへ
TabIndexプロパティ 0から順に
表示ータブオーダーー順番にクリック
TabStopプロパティをFalseで、Tabキーで移動しない。
−−−−−−−−−−−−−−−
プロジェクト名:Tab Order
フォームの名前(Name):fclsTabOrder
フォームのTextプロパティ:Tab Order Example
スタートアップの設定:fclsTabOrder
リストボックス
−−−−−−−−−−−−−−−
プロジェクト名:Lists
フォームの名前(Name):fclsLists
フォームのTextプロパティ:Lists Example
スタートアップの設定:fclsLists
ListBoxコントロールのプロパティ
Name:lstPinkFloydAlbum
Location:72,32
Size:160,121
Item:
Atom Heart Mother
Sauceer Full of Secrets
Wish You Were Here
Animals
Echoes
Piper at the Grates of Dawn
リストに項目を追加する
Addメソッド
ここでは、フォー上のボタンを押すと、リストに項目追加。
Buttonコントロールのプロパティ
Name:btnAddItem
Location:104,160
Size:96,23
Text:項目追加
Clickイベントハンドラ
lstPinkFloydAlbum.Items.Add("Dark Side of the Moon")
intIndexに追加した項目のインデックス番号を入れる。
Dim intIndex As Integer
intIndex = lstPinkFloydAlbum.Items.Add("Dark Side of the Moon")
リストから項目を削除
Removeメソッド
Buttonコントロールのプロパティ
Name:btnRemoveItem
Location:104,192
Size:96,23
Text:項目削除
Clickイベントハンドラ
lstPinkFloydAlbum.Items.Remove("Dark Side of the Moon")
メニューに関するコードを書く
終了メニューをダブルクリック
If mnuAskBeforeClosing.Checked Then
If MsgBox("終了してよろしいですか?", MsgBoxStyle.YesNo) _
= MsgBoxResult.No Then
Exit Sub
End If
End If
Me.Close()
閉じる前に確認するメニューをダブルクリック
mnuAskBeforeClosing.Checked = Not (mnuAskBeforeClosing.Checked)
ーー>メニューのCheckedプロパティを反転させる。True<->False
tbrMainToolbarボタンをダブルクリック
Select Case tbrMainToolbar.Buttons.IndexOf(e.Button)
Case 0
Me.Close()
Case 1
txtMyTextbox.Visible = Not (tbbInvisible.Pushed)
End Select
インデックス番号は、左から数えて、最初が0,1,2,・・・
Tagプロパティを使う
tbbQuitのTag:Quit
tbbInvisibleのTag:Invisible
tbrMainToolbarボタンをダブルクリック
Select Case e.Button.Tag
Case "Quit"
Me.Close()
Case "Invisible"
txtMyTextbox.Visible = Not (tbbInvisible.Pushed)
End Select
四角形領域を使うーーーRectangle
座標(0,0)が左上端の、幅100、高さ50の四角形領域
Dim rectBounding As New Rectangle()
rectBounding.X = 0
rectBounding.Y = 0
rectBounding.Width = 100
rectBounding.Height = 50
又は
Dim rectBounding As New Rectangle(0,0,100,50)
メモリ上のビットマップを使い、そのビットマップからフォームに転送することで、描画する。
Inheritsステートメントの下の行
Private m_objDrawingSurfacs As Bitmap
フォームのLoadイベントハンドラ
Randomize()
'フォームのクライアント領域と同じ大きさのビットマップを用意する
m_objDrawingSurfacs = New Bitmap( _
Me.ClientRectangle.Width, _
Me.ClientRectangle.Height, _
Drawing.Imaging.PixelFormat.Format24bppRgb)
InitializeSurface()
フォームのLoadイベントハンドラの最後のEnd Subの後に
Private Sub InitializeSurface()
Dim objGraphics As Graphics
Dim rectBounds As Rectangle
'ビットマップ用のGraphicsオブジェクトを作成する
objGraphics = Graphics.FromImage(m_objDrawingSurface)
objGraphics.Clear(System.Drawing.SystemColors.Control)
'ビットマップと同じサイズの四角形領域を作成する
rectBounds = New Rectangle(0, 0, m_objDrawingSurface.Width, _
m_objDrawingSurface.Height)
'楕円形がフォームの端に重ならないように、四角形領域を小さくする
rectBounds.Inflate(-1, -1)
'楕円形を描画する
objGraphics.DrawEllipse(System.Drawing.Pens.Orange, rectBounds)
End Sub
メモリ上のビットマップから、フォームに描画ーーーフォームのPaintハンドラ
コードエディタの左上部のドロップダウンリストから、Base Class Events
右側から、Paint
Dim objGraphics As Graphics
'e.Graphicsはこのフォームに描画できるGraphicsオブジェクト
objGraphics = e.Graphics
'ビットマップの内容をフォームに描画する
objGraphics.DrawImage(m_objDrawingSurface, 0, 0, _
m_objDrawingSurface.Width, _
m_objDrawingSurface.Height)
テキストボックスに入力した内容をフォームに描画
「文字描画」ダブルクリック
Dim objGraphics As Graphics
Dim objFont As Font
Dim intFontSize As Integer
Dim intTextX As Integer
Dim intTextY As Integer
'テキストボックスにデータが入力されていなければ、何もせずに終わる
If txtInput.Text = "" Then Exit Sub
'メモリ上のビットマップ用のGraphicsオブジェクトを作成する
objGraphics = Graphics.FromImage(m_objDrawingSurface)
'8〜48の範囲で、ランダムなフォントサイズを算出する
intFontSize = Int((48 - 8 + 1) * Rnd() + 8)
'文字列のX座標のために、乱数で生成する
intTextX = Int(((Me.ClientRectangle.Width - 20) - 0 + 1) * Rnd() + 0)
'文字列のY座標のために、乱数で生成する
intTextY = Int(((Me.ClientRectangle.Height - 20) - 0 + 1) * Rnd() + 0)
'フォントオブジェクトを作る
objFont = New System.Drawing.Font("Arial", intFontSize, _
FontStyle.Bold Or FontStyle.Italic)
'文字列を描画する
objGraphics.DrawString(txtInput.Text, objFont, _
System.Drawing.Brushes.Red, intTextX, intTextY)
'Graphicsオブジェクトの後処理をする
objGraphics.Dispose()
'フォームに描画させる。この記述はPaintイベントを起こさせる。
Me.Invalidate()
Invalidateメソッドは、クライアント領域の内容がOSに通知し、これにより、再表示、Paintイベントが発生し、表示。
プロシージャ
プロシージャ:実行されるコードの独立したブロック
特定の一機能とすべき。複数の機能を入れない。
・処理結果の値を返す Functionプロシージャ
・処理結果は返さない Sub プロシージャ
モジュールは、プロシージャを複数まとめて納めることが出来る格納場所
−−−−−−−−−−−−−−−
プロジェクト名:ModulesAndProcedures
フォームの名前(Name):fclsExample
フォームのTextプロパティ:Module Example
スタートアップの設定:fclsExample
Size:371,300
プロジェクトーーモジュールの追加
mdlModuleExample.vb
Public:このモジュール以外から呼ぶことができる
Private:モジュール内のみ
DrawEllipseプロシージャ
Public Sub DrawEllipse(ByVal frm As System.Windows.Forms.Form)
Dim objGraphics As Graphics
Dim recDrawRectangle As Rectangle
recDrawRectangle = frm.DisplayRectangle
recDrawRectangle.Inflate(-5, -5)
objGraphics = frm.CreateGraphics()
objGraphics.Clear(System.Drawing.SystemColors.Control)
objGraphics.DrawEllipse(System.Drawing.Pens.Blue, _
recDrawRectangle)
objGraphics.Dispose()
End Sub
ClearEllipseプロシージャ(フォームから楕円を消去)
Public Sub ClearEllipse(ByVal frm As System.Windows.Forms.Form)
frm.Refresh()
End Sub
値を戻すプロシージャ
Public/private Function 名前 (引数) As データ型
Public Function ComputeLength(ByVal strText As String) As Integer
ComputeLength = Len(strText)
End Function
プロジェクトにユーザーインターフェースを追加
Form1.vbデザイン
Buttonコントロールのプロパティ
Name:btnDrawEllipse
Size:80,23
Text:楕円の描画
Buttonコントロールのプロパティ
Name:btnClearEllipse
Location:283,0
Size:80,23
Text:楕円の消去
Buttonコントロールのプロパティ
Name:btnComputeLength
Location:0,250
Size:100,23
Text:文字数の算出
TextBoxコントロールのプロパティ
Name:txtInputForLength
Location:110,250
Text:
プロシージャを呼び出す
「楕円の描画」ダブルクリック
Call DrawEllipse(Me)
Callは、値を返さないプロシージャを呼び出す
「楕円の消去」ダブルクリック
Call ClearEllipse(Me)
「文字数の算出」ダブルクリック
Dim intLength As Integer
intLength = ComputeLength(txtInputForLength().Text)
Debug.WriteLine("length = " & intLength)
引数を渡す
Public Sub MyProcedure (引数 As データ型 , 引数 As データ型)
値渡しは、 プロシージャの宣言において、引数の前に ByVal を付ける
何も付けないと、値渡し。
参照渡しは、プロシージャの宣言において、引数の前に ByRef を付ける
任意の場所で、プロシージャを抜ける
Exit Sub
Exit Function
又は
Return
無限ループ(再帰的なプロシージャ)の呼び出しを避ける
Sub Mainを利用する
「スタートアップの設定」-->Sub Main
Public Sub Main()
End Sub
Sub Mainからモードレスを表示
Public Sub Main()
Application.Run(New fclsExample())
End Sub
タスク一覧
表示ーーその他のウィンドーータスク一覧
定数、データ型、変数、配列
データ型
Boolean
Byte
Char
Date
Double
Integer
Object
Single
String
・・・
データを別の型に変換
CByte(引数)
CChar(引数)
CObj(引数)
・・・
定数ーーーConst 変数名 As データ型 = 値
変数の定義
Dim 変数名 As データ型 = 値
例
Dim I,j,k As Integer
Dim I As Integer, J As Long
Dim strName As String = "Tokyo"
厳密な型指定
データ型を適切に使うことを強制。
プロジェクトのプロパティーー共有プロパティーービルドーーOption StrictをOn(デフォルトはOff)
配列
Dim strMyArray(10) As String
0,1,2,・・・,9,10の11個
スコープ(変数の適用範囲)
ブロックスコープ(.NETから)ーーDoループ、Ifループの中
プロシージャスコープ(ローカル変数)ーープロシージャの中
モジュールスコープーーモジュールの中(Inheritsの下)
グローバルスコープーー標準モジュールの中 Public
静的変数ーーStatic
複数回のプロシージャの呼び出しをまたいで、変数の値が維持される。
例
Static Dim intMyInteger As Integer
慣例的な命名規則
データ型
Boolean bln
Byte byt
Char chr
Date dte
Decimal dec
Double dbl
Integer int
Long lng
Object obj
Short sho
Single sng
String str
変数の接頭辞を使ってスコープを表す
g グローバル g_strSavePath
m モジュール m_blnDataChanged
st 静的変数 st_blnInHere
なし ローカル変数 _
計算の実行、文字列操作、日付時間
演算子の優先順位
指数演算 ^ 20 ^ 2
マイナス符号 -
乗算、除算 * , /
整数除算 \
剰余 MOd 10 Mod 3
加算、減算 + , -
文字列の連結 & "Tokyo " & "Oosaka"
関係演算 =,<>,<,>,<=,>=
論理演算(否定) Not
論理演算(論理積) And,AndAlso
論理演算(論理和) Or,OrElse
論理演算(排他的論理和)Xor
文字列の関数
文字の数ーーLen Len("Tokyo")
左部分のデーターーLeft Left("Tokyo",2) -->"To"
右部分のデーターーRight
特定部分のデーターーMid Mid("Tokyo",3,2) -->"ky"
MId("Tokyo",3)----->"kyo"
文字列が別の文字列の中に含まれるか調べるーーInStr
InStr([開始地点],検査対象の文字列,見つけるべき文字列)
見つかれば、何文字目かを、見つからなければ、0を返す。
例
InStr("Tokyo Japan"," ") -->6
文字列の先頭と末尾のスペースを削除ーーTrim
Trim() 先頭と末尾の両方のスペースを削除
Ltrim() 先頭のスペースを削除
RTrim() 末尾のスペースを削除
日付と時間
Dim objMyBirthday As Date = #7/22/1969#
加減算ーーDateAdd
DateAdd(期間の種類,期間,日付) As Date
例
DateAdd(DateInterval.Month, 6, objMyBirthday)-->1/22/1970
日付、時間の差ーーDateDiff
DateDiff(期間の種類,日付1,日付2) As Long
例
DateDiff(DateInterval.Day,#3/3/1997#,#7/2/1997#)-->121
日付の一部を取得ーーDatePart
DatePart(日付情報の種類,日付) As Integer
例
DatePart(DateInterval.Hour,#3:00:00 PM#)-->15(24時間表記)
日付と時間の表示書式ーーFormat
Format(式,スタイル)
例
Format(#5/14/1998 9:37:00 PM#,"yyyy年MM月dd日 hh:mm tt")
-->1998年05月14日 09:37 午後
現在の日付と時間ーーDateTime
日付 DateTime.Today
日付と時間 DateTime.Now
例
Dim objToday As Date = DateTime.Now
データが有効な日付かどうかの判断ーーIsDate
有効ならTrue、無効ならFalse
例
Debug.WriteLine(IsDate (txtBirthday.Tect))
条件判断
If・・・Then
If 条件式 Then
実行
End If
If 条件式 Then
実行
Else
実行
End If
If 条件式 Then
実行
ElseIf 条件式 Then
実行
Else
実行
End If
Select Case
Select Case 式
Case Is = 値1,値12,値13
実行
Case Is 値2
実行
Case > 値3
実行
Case Else
実行
End Select
Go To
行ラベルーー:
例
Private Sub DoSomething()
If a>0 then GoTo PROC_EXIT
PROC_EXIT:
Exit Sub
End Sub
ループ
For・・・Next
For カウンタ変数 = 初期値 To 上限 [Step 1回の増分]
ループ内のステートメント
[Exit For]
ループ内のステートメント
Next [カウンタ変数]
Exit For:Nextステートメントの次へジャンプ
Do・・・Loopーー回数が特定できないループに
Do
ステートメント
Loop
Do
ステートメント
If 条件式 Then Exit Do
Loop
条件式がTrueである限り
Do While 条件式
ステートメント
Loop
条件式がTrueになると終了。Falseである限り。
Do Until 条件式
ステートメント
Loop
条件式がTrueである限り。1回は実行。
Do
ステートメント
Loop While 条件式
条件式がFalseである限り。1回は実行。
Do
ステートメント
Loop Until 条件式
デバッグ
コメント
・コードの目的を記述([どのように」ではなく「何をするか」)
・コードの背景にある考え方、ロジックを明らかにする
・コード内の重要な箇所に注意を向けるようにする
・読んでいる人が、頭の中でコードの流れを追いかけることを軽減するように
'コメント
Dim intAge As Integer 'ユーザーの年齢を格納
エラー
・コンパイルエラー
・実行エラー
例
−−−−−−−−−−−−−−−
プロジェクト名:Debugging Example
フォームの名前(Name):fclsDebuggingExample
フォームのTextプロパティ:Debugging Example
スタートアップの設定:fclsDebuggingExample
TextBoxコントロールのプロパティ
Name:txtInput
Location:88,112
Size:120,19
Text:
Buttonコントロールのプロパティ
Name:btnPerformDivision
Location:96,144
Size:104,23
Text:除算の実行
「除算の実行]ダブルクリック
'テキストボックスに入力した値を使って
'数値100を割る演算を行う
Dim lngAnswer As Long
lngAnswer = 100 / CLng(txtInput.Text)
MsgRox("100/" & txtInput.Text & " = " lngAnswer)
MsgRoxは意図的な間違い
F5
ビルドエラーーーいいえ
タスク一覧ーーエラー表示行をダブルクリック
修正
F5
除算の実行
中断
緑色の表示
デバックーーデバッグの停止
ブレークポイント
行の左をクリック
中断された際可能になる主な作業
続行 F5
ステップイン F11
プロシージャの呼び出しなら、そのプロシージャの中に入り、先頭で中断
ステップオーバー F10
プロシージャの呼び出しなら、そのプロシージャを実行し、次で中断
ステップアウト
現在のプロシージャを実行し、プロシージャを抜けた地点で中断
コマンドウィンド
Ctrl + Alt + A (表示ーーその他のウィンドーーコマンドウィンド)
直接ステートメントを入力して実行できる。
F5
除算の実行
F5
中断
コマンドウィンド
? txtInput.Text
""
デバッグーーデバッグの停止
If txtInput.Text = "" Then Exit Sub
F5
除算の実行
TextBoxに入力
除算の実行
F5
中断
コマンドウィンド
? txtInput.Text
If Not (IsNumeric(txtInput.Text)) Then Exit Sub
IsNumeric関数:数値ならTrue
出力ウィンド
Debug.WriteLine(txtInput.Text)---???
Try・・・ Catch・・・ Finally
Tryの次 :例外が発生する可能性があるコード
Catchの次 :例外が発生したときに実行するコード
Finallyの次 :その後で、例外の有無にかかわらず、実行されるコード
例
−−−−−−−−−−−−−−−
プロジェクト名:Structured Error Handlig
フォームの名前(Name):fclsErrorHandligExample
フォームのTextプロパティ:Try・・・ Catch・・・ Finally
スタートアップの設定:fclsDebuggingExample
Buttonコントロールのプロパティ
Name:btnCatchException
Location:104,128
Size:96,23
Text:例外のキャッチ
「例外のキャッチ」ダブルクリック
Try
Debug.WriteLine("Try")
'例外が発生する可能性があるコード
Catch
Debug.WriteLine("Catch")
'例外が発生したときに実行するコード
Finally
Debug.WriteLine("Finally")
End Try
Debug.WriteLine("Done")
例外オブジェクト
Catch 変数名 As Exception
Catch objException As Exception
Debug.WriteLine("Catch")
MsgBox("実行エラー発生: " & objException.Message)
予測される例外に対処
Catch objException As InvalidCastException
MsgBox("入力データの形式が不正です。")
Catch objException As OverflowException
MsgBox("オーバーフローが起こり、割り算に失敗しました。")
Catch objException As Exception
MsgBox("予期せぬ実行エラーが発生しました。")
クラスを使ってオブジェクトをデザイン
OOP:Object Oriented Programing オブジェクト指向プログラミング
クラスは、オブジェクトを定義するテンプレート。
フォームのコードを記述するということは、クラスを作っている。
プログラム実行時に、フォームオブジェクトのインスタンスが、クラスから生成される。
カプセル化:オブジェクトという1つの単位に、データと操作するコードを閉じ込める。
データとメソッドのコードを外側から見えないように、閉じ込める。
インターフェイス:外部に公開する部分。
インターフェイスになりえる、構成メンバ
・プロパティ:オブジェクトの公開されたデータ
・メソッド: オブジェクトの公開されたプロシージャ
・イベント
オブジェクト
┏━イターフェース━┓
┏━━━━━━┓ ┃ ┃
┃ ┃<------->プロパティ ┃
┃クライアント┃-------->メソッド ┃
┃ ┃<--------イベント ┃
┗━━━━━━┛ ┗━━━━━━━━━┛
オブジェクトの属性をプロパティとして公開する
・Public:Public変数は、そのまま、クラスのプロパティとして利用できる
Public Quantity As Long
クライアントは、次のように記述
objMyObject.Quantity = 139
重大な限界があり、この方法は好ましくない。
・プロパティの値が変化したタイミングで、コードを実行できない
・クライアントが変更することを禁止できない(直接変更する)
・データの整合性の維持が難しい
・プロパティプロシージャ
Public Property propName() As Long
Get
'プロパティの値を返すプロシージャを記述
End Get
Set (Byval Value As Long)
'プロパティに新しい値を設定するプシージャを記述
End Set
End Property
機能をメソッドとして公開する
Subプロシージャ、Functionプロシージャ
クラスからインスタンスを作る
オブジェクトインスタンス名 = New クラス
オブジェクトのバインディングを行う
バインディング:特定のオブジェクトが割与えられ、変数が特定の物を確定
事前バインディング:コンパイル時。遅延バインディングより優れている。
遅延バインディング:実行時ーー変数にObject型
変数宣言と同時にオブジェクトインスタンスを作成する
Dim objMyObject As New clsMyClass()
オブジェクトの参照を止める
・変数がそのスコープを抜け出す
・Nothingを設定 objMyObject = Nothing
オブジェクトのライフタイム
実行環境が管理
Newキーワードで、インスタンス生成
例
−−−−−−−−−−−−−−−
プロジェクト名:Class Programing Example
フォームの名前(Name):fclsClassExample
フォームのTextプロパティ:Class Example
スタートアップの設定:fclsClassExample
プロジェクトーークラスの追加
clsMyClass.vb
Private m_lngHeight As Long
Public Property Height() As Long
Get
Height = m_lngHeight
End Get
Set(ByVal Value As Long)
If m_lngHeight < 10 Then Exit Property
m_lngHeight = Value
End Set
End Property
'機能をメソッドとして公開する
Public Function AddTwoNumbers(ByVal intNumber1 As Integer, _
ByVal intNumber2 As Integer) As Long
AddTwoNumbers = intNumber1 + intNumber2
End Function
クラスからオブジェクトインスタンスを作る
Form1.vb[デザイン]
Buttonコントロールのプロパティ
Name:btnCreatObject
Location:96,120
Size:100,23
Text:インスタンス作成
「インスタンス作成」ダブルクリック
遅延バインディング
Dim objMyObject As Object
objMyObject = New clsMyClass()
MsgBox(objMyObject.AddTwoNumbers(1, 2))
事前バインディング
Dim objMyObject As clsMyClass
変数宣言と同時にオブジェクトインスタンスを作成する
Dim objMyObject As New clsMyClass()
ユーザーとの対話 MsgBox InputBox
メッセージボックス MsgBox
MsgBox(プロンプト, [ボタンの種類], [タイトル])
プロンプト:表紙される説明文
ボタンの種類:省略時ーOK
タイトル:タイトルバーに表示される内容。省略時ープロジェクトの名前
例
MsgBox("これはメッセージです。")
ボタンの種類
MsgBoxStyle.OKOnly [OK]ボタンのみ
MsgBoxStyle.YesNo [はい]ボタン、[いいえ]ボタン
・・・
例
MsgBox("処理を行いますか。" _
MsgBoxStyle.OKCancel Or MsgBoxStyle.Exclamation)
例ーーキャンセルをデフォルトボタン(Enterで動作)に設定。
MsgBox("後から取り消せない動作をしてよいですか。" _
MsgBoxStyle.OKCancel Or MsgBoxStyle.Exclamation Or _
MsgBoxStyle.DefaultButton2)
例
MsgBox("何か問題が起こりました。" _
MsgBoxStyle.Critical Or MsgBoxStyle.OKOnly)
どのボタンが押されたか判断するーーMsgBoxResult
If MsgBox("これを行いたいですか。",MsgBoxStyle.YesNo _
or MsgBoxStyle.Exclamation) = MsgBoxResult.Yes Then
'ここに「はい」ボタンが押されたときの処理を記述
End If
カスタムダイアログボックス
ボタンを押すと、そのダイアログボックスを閉じて、戻り値を返す。
例
−−−−−−−−−−−−−−−
プロジェクト名:Custum Dialog Example
フォームの名前(Name):fclsMain
フォームのTextプロパティ:Custum Dialog Box Example
スタートアップの設定:fclsMain
Buttonコントロールのプロパティ
Name:btnShowCustomDialogBox
Location:62,180
Size:168,23
Text:カスタムダイアログボックスを表示
カスタムダイアログボックスを追加
プロジェクトーーWindowsフォームの追加ーー
fclsCustomDialogBox.vb
Text:This is a custum dialog box.
テキストボックスを追加
TextBoxコントロールのプロパティ
Name:txtCustomMessage
Location:8,8
Size:280,224
Locked:True
Multiline:True
Text:メッセージを入力してください
キャンセルボタン追加ーーDialogResultプロパティを設定
Buttonコントロールのプロパティ
Name:btnCancel
DialogResult:Cancel
Location:136,240
Size:75,23
Text:キャンセル
OKボタン追加ーーDialogResultプロパティを設定
Buttonコントロールのプロパティ
Name:btnOk
DialogResult:OK
Location:216,240
Size:75,23
Text:OK
フォームの表示方法の指定
フォームの表示はShowメソッドだが、
カスタムダイアログボックスの表示は、ShowDialogメソッド。
Form1.vb[デザイン]
「カスタムダイアログボックスを表示」ダブルクリック
Dim objCustumDialogBox As New fclsCustomDialogBox()
If objCustumDialogBox.ShowDialog() = DialogResult.OK Then
MsgBox("[OK]を押しました。")
Else
MsgBox("[キャンセル]を押しました。")
End If
objCustumDialogBox = Nothing
InputBox関数を使って、ユーザーからの入力情報を取得する
ユーザーからデータを受け取る方法
・コントロールがついたフォームを作成する
・InputBox関数を使う
InputBox関数
1項目のデータしか受け付けることができない。
InputBox(プロンプト, [タイトル],[デフォルト値])
プロンプト:表示される説明文
タイトル:タイトルバーに表示される内容。省略時ープロジェクトの名前
例
strResult = InputBox("一番好きな色は何ですか。","色の入力")
strResult = InputBox("卵をいくつ注文しますか。","卵の注文","12")
留意点
・戻り値は文字列
・ユーザーがCancelを押すと、""が返る
例
−−−−−−−−−−−−−−−
プロジェクト名:InputBox Example
フォームの名前(Name):fclsInputBoxExample
フォームのTextプロパティ:InputBox Example
スタートアップの設定:fclsInputBoxExample
Buttonコントロールのプロパティ
Name:btnGetAge
Location:112,120
Size:75,23
Text:年齢の入力
「年齢の入力」ダブルクリック
Dim strResult As String
Dim intAge As Integer
strResult = InputBox("年齢を入力してください。", "年齢の入力")
If strResult = "" Then
MsgBox("データが入力されませんでした。")
ElseIf IsNumeric(strResult) Then
'ユーザーが年齢を入力したので、その値を変数に格納する
intAge = CInt(strResult)
MsgBox("あなたの年齢は " & intAge & "です。")
Else
MsgBox("数値以外のデータが入力されました。")
End If
キーボードを使って対話的な操作を行う
そのコントロールが入力フォーカスを持つとき
KeyDown :キーを押すと発生
KeyPress :キーを押した状態になると発生
KeyUp :キーを放すと発生
例
−−−−−−−−−−−−−−−
プロジェクト名:Keyboad Example
フォームの名前(Name):fclsKeyboadExample
フォームのTextプロパティ:Keyboad Example
スタートアップの設定:fclsKeyboadExample
TextBoxコントロールのプロパティ
Name:txtInput
Multiline:True
Location:24,80
Size:240,120
Text:
文字「k」を入力すると、その文字を食べてしまうように。
TextBoxをダブルクリック
左上から、txtInput
右上から、KeyPressイベント
If e.KeyChar = "k" Then
e.Handled = True
End If
「k」は、入力できない。「K」は入力できる。
大文字と、小文字と区別しないときは、ToLowerメソッドを使う。
If e.KeyChar.ToLower(e.KeyChar) = "k" Then
e.Handled = True
End If
マウスイベント
MouseEnter :マウスボタンがコントロールの上に入ったら
MouseMove :マウスボタンがコントロールの上で移動したら
MouseHover :マウスボタンがコントロールの上で停止状態になったら
MouseDown :コントロールの上でマウスボタンを押したら
MouseUp :コントロールの上でマウスボタンを放したら
MouseLeave :マウスボタンがコントロールの上から抜け出たら
例ーーユーザーがフォームの上で描画する
−−−−−−−−−−−−−−−
プロジェクト名:Mouse Paint
フォームの名前(Name):fclsMousePaint
フォームのTextプロパティ:Paint with the Mouse
スタートアップの設定:fclsMousePaint
フォーム自身をダブルクリック
m_objGraphics = Me.CreateGraphics()
フォームのクライアント領域に関するGraphicsオブジェクトを作成。
m_objGraphics はモジュールレベルの変数として宣言。
Inheritsステートメントの次に、
Private m_objGraphics As Graphics
Graphicsオブジェクトの後処理は、フォームのClosedイベントハンドラで。
フォームを閉じると発生。
左上から (Base class Events) を選ぶ。
右側から Closed イベントを選ぶ。
m_objGraphics.Dispose()
マウスの左ボタンが押されているか確認、
四角形領域を作成、円を描画DrawEllipse、
左上から (Base class Events) を選ぶ。
右側から MouseMove イベントを選ぶ。
Dim rectEllipse As Rectangle
If e.Button <> MouseButtons.Left Then Exit Sub
With rectEllipse
.X = e.X + 1
.Y = e.Y + 1
.Width = 2
.Height = 2
End With
m_objGraphics.DrawEllipse(Pens.Blue, rectEllipse)
引数 e は、イベントに関連したオブジェクトを表す。
ファイル操作
「開く」ダイアログボックス
「保存」ダイアログボックスに
コントロールを使う
−−−−−−−−−−−−−−−
プロジェクト名:Manipulating Files
フォームの名前(Name):fclsManipulatingFiles
フォームのTextプロパティ:Manipulating Files
スタートアップの設定:fclsManipulatingFiles
TextBoxコントロールのプロパティ
Name:txtSource
Location:95,8
Size:184,19
Text:
OpenFileDialogコントロール
ファイル一覧を閲覧してフアァイルを選択するダイアログボックス。
本当にファイルを開くわけではなく、開くべくファイルを選択。
OpenFileDialogコントロールをダブルクリック
Buttonコントロールのプロパティ
Name:btnOpenFile
Location:8,8
Size:80,23
Text:移動前
「移動前」ダブルクリック
OpenFileDialog1.InitialDirectory = "c:\"
OpenFileDialog1.Title = "ファイルを選択する"
'Filterプロパティ 説明|*.拡張子
OpenFileDialog1.Filter = "テキスト文書(*.txt)|*.txt"
'最初にどの種類を選択した状態にしておくかを指定
OpenFileDialog1.FilterIndex = 1
'「開く」ダイアログボックスを表示。
If OpenFileDialog1.ShowDialog() <> DialogResult.Cancel Then
txtSource.Text = OpenFileDialog1.FileName
Else
txtSource.Text = ""
End If
Filterプロパティ
説明|*.拡張子
例
control.Filter = "ビットマップ(*.bmp)|*.bmp"
control.Filter = "ビットマップ(*.bmp)|*.bmp|JPEG(*.jpg)|*.jpg"
最初にどの種類を選択した状態にしておくかを指定
OpenFileDialog1.FilterIndex = 1
「開く」ダイアログボックスを表示。
存在しないファイル名を指定するためには、CheckFileExistsプロパティをFalseに。
SaveFileDialogコントロール
実際にファイルを保存するのではなく、ファイルを指定できるだけ。
TextBoxコントロールのプロパティ
Name:txtDestination
Location:95,40
Size:184,19
Text:
Buttonコントロールのプロパティーー保存するファイル名を指定できる。
Name:btnSaveFile
Location:8,40
Size:80,23
Text:移動後
SaveFileDialogコントロールをダブルクリック
「移動後」ダブルクリック
SaveFileDialog1.Title = "保存先を指定する"
SaveFileDialog1.Filter = "テキスト文書(*.txt)|*.txt"
SaveFileDialog1.FilterIndex = 1
'存在しているファイルを指定すると、確認メッセージを表示
SaveFileDialog1.OverwritePrompt = True
'ダイアログボックスを表示
If SaveFileDialog1.ShowDialog() <> DialogResult.Cancel Then
txtDestination.Text = SaveFileDialog1.FileName
End If
存在しているファイルを指定すると、確認メッセージを表示
SaveFileDialog1.OverwritePrompt = True
存在していないファイルを指定すると、確認メッセージを表示
SaveFileDialog1.CreatePrompt = True
Fileオブジェクトを使ってファイルを操作
名前空間:クラス等がグループ化され、そのグループのこと。
Fileクラス:System名前空間の IO名前空間 System.IO.File
ファイルが存在するか判断
対象ファイルが存在するかチェックする Function プロシージャを作る。
ファイルがあるかどうかは、File.Exists メソッドを使う。
Private Function SourceFileExists() As Boolean
If Not (System.IO.File.Exists(txtSource.Text)) Then
MsgBox("指定したファイルがありません。", MsgBoxStyle.Exclamation)
SourceFileExists = False
Else
SourceFileExists = True
End If
End Function
ファイルをコピーするーーCopyメソッド
ボタン追加。移動前ボタンで指定したファイル名のファイルを
移動後ボタンで指定したファイル名を持つファイルにコピー。
Buttonコントロールのプロパティ
Name:btnCopyFile
Location:96,80
Size:75,23
Text:コピー
「コピー」ダブルクリック
If Not (SourceFileExists()) Then Exit Sub
System.IO.File.Copy(txtSource.Text, txtDestination.Text)
MsgBox("ファイルのコピーに成功しました。")
ファイルを移動するーーMoveメソッド
Buttonコントロールのプロパティ
Name:btnMove
Location:96,112
Size:75,23
Text:移動
「移動」ダブルクリック
If Not (SourceFileExists()) Then Exit Sub
System.IO.File.Move(txtSource.Text, txtDestination.Text)
MsgBox("ファイルの移動に成功しました。")
ファイルを削除するーーDeleteメソッド
Deleteメソッドは、永久にファイルを消す。
Buttonコントロールのプロパティ
Name:btnDelete
Location:96,144
Size:75,23
Text:削除
「削除」ダブルクリック
If Not (SourceFileExists()) Then Exit Sub
If MsgBox("移動前のファイルを本当に削除してよいですか", _
MsgBoxStyle.Question Or MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
System.IO.File.Delete(txtSource.Text)
MsgBox("ファイルの削除に成功しました。")
End If
ファイル名を変更するーーMoveメソッド
ファイルの属性を取得する
ファイルの日付や時間を取得
GetCreationTime() :作成した日付と時間
GetLastAccessTime() :最後にアクセスした日付と時間
GetLastWriteTime() ;最後に更新した日付と時間
ファイルの属性を取得
Fileオブジェクトの GetAtriButesメソッドを呼び出し、
GetAtriButes型のデータを取得。
Dim attrs As System.IO.FileAtributes
attrs = System.IO.File.GetAttibutes("c:\test.txt")
例えば、ファイル読み取り専用の属性がオンになっているかどうか判断。
attrs And System.IO.FileAttributes.ReadOnly
オンなら、0以外の値に、ビットがオフなら0になる。
FileAttributesで属性ビットの識別に使う値
Archive ファイルのアーカイブ状態。
Compressed ファイルは圧縮されています。
Directory このファイルはディレクトリです。
Encrypted ファイルまたはディレクトリは暗号化されています。
Hidden ファイルは隠しファイルです。
Normal 標準のファイルであり、ほかの属性セットは持ちません。
ReadOnly ファイルは読み込み専用です。
System システム ファイルです。
Temporary 一時ファイルです。
Buttonコントロールのプロパティ
Name:btnGetFileProperties
Location:8,176
Size:80,56
Text:属性の表示
TextBoxコントロールのプロパティ
Name:txtProperties
Location:96,176
Multiline:True
ScrollBase:Vertical
Size:184,88
Text:
インポートのチェック
プロパティーー左ペインの共有プロパティーーインポート
System が入っているので、System. を省略できる。
「属性の表示」ダブルクリック
Dim strProperties As String
Dim attrs As System.IO.FileAttributes
If Not (SourceFileExists()) Then Exit Sub
'日付関連のデータを取得
strProperties = "作成: " & _
System.IO.File.GetCreationTime(txtSource.Text)
strProperties = strProperties & vbCrLf
strProperties = strProperties & "最新アクセス: " & _
System.IO.File.GetLastAccessTime(txtSource.Text)
strProperties = strProperties & vbCrLf
strProperties = strProperties & "最新更新: " & _
System.IO.File.GetLastWriteTime(txtSource.Text)
'その他の属性の取得
attrs = System.IO.File.GetAttributes(txtSource.Text)
strProperties = strProperties & vbCrLf
strProperties = strProperties & "Normal: " & _
CBool(attrs And IO.FileAttributes.Normal)
strProperties = strProperties & vbCrLf
strProperties = strProperties & "Hidden: " & _
CBool(attrs And IO.FileAttributes.Hidden)
strProperties = strProperties & vbCrLf
strProperties = strProperties & "ReadOnly: " & _
CBool(attrs And IO.FileAttributes.ReadOnly)
strProperties = strProperties & vbCrLf
strProperties = strProperties & "System: " & _
CBool(attrs And IO.FileAttributes.System)
strProperties = strProperties & vbCrLf
strProperties = strProperties & "Temporary: " & _
CBool(attrs And IO.FileAttributes.Temporary)
strProperties = strProperties & vbCrLf
strProperties = strProperties & "Archive: " & _
CBool(attrs And IO.FileAttributes.Archive)
txtProperties.Text = strProperties
Directoryオブジェクトを使ってフォルダの操作を行う
System.IO.Directory
フォルダを作る
System.IO.Directory.CreateDirectory("c:\My New directory")
フォルダが存在するか調べる
MsgBox(System.IO.Directory.Exists("c:\My New directory")
フォルダを移動ーー(移動元,移動先)
System.IO.Directory.Move("c:\MyFolder1","c:\MyFolder2")
フォルダを削除ーーフォルダの中のすべてのファイルが削除される。
System.IO.Directory.Delete("c:\MyFolder")