情報システム科



Visual Basic.NET

独習 Visual Basic.NET
Jamer Foxall著
翔泳社発行
2003年1月21日
を、勉強したときの、メモです。
詳しくは、上記本で、勉強しましょう。


目次

プログラミングツアー
操作
オブジェクトとコレクション
イベント
ユーザインターフェース
フォーム
フォーム2
コントロール
より高度なコントロール
メニューとツールバー
描画
プログラミング
プロシージャ
定数、データ型、変数、配列
計算の実行、文字列操作、日付時間
条件判断
ループ
デバッグ
クラスを使ってオブジェクトをデザイン
ユーザーとの対話 MsgBox InputBox
データを操作する
ファイル操作
オートメーション
ソリューションの配布
アプリケーションを配布
.NET Frameworkオーバービュー

プログラミングツアー

コンポーネント
プロジェクト
ソリューション

起動
Microsoft Visual Studio .NET
新しいプロジェクト
プロジェクトの種類 : Visual Basic プロジェクト
テンプレート    : Windowsアプリケーション
(Name) : fclsViewer
Text : Picture Viewer -->タイトルバーの表示変わる
フォームにアイコンを付ける:フォームを選択。Icon
フォームのサイズの変更 : Size,Width,Height
ファイル−すべてを保存

コントロール
フォームに配置するオブジェクトの事
ツールボックス
Windowsフォーム
Buttenをダブルクリック
Name:btnSelectPicture
Text:画像選択
Location:301,10
Size , Width:85

「画像選択」ボタンをコピー、貼り付け
Name:btnQuit
Text:終了
Location:301,40

PictureBoxコントロールをフォームに追加(画像ファイルの内容を表示)
Name:picShowPicture
BorderStyle:FixedSingle
Location:8,8
Size :282,275
すべてを保存

OpenFileDialog
Name:ofdSelectPicture
Filter:ビットマップ|*.bmp|JPEG形式|*.jpg-->「ファイルを開く」ダイアログボックス内の「ファイルの種類」ドロップダウンリストに表示
Title:画像ファイルの選択-->ファイルを開く」ダイアログボックスのタイトルバーに表示

ユーザーインターフェースのコードを書く
「画像選択」ボタンをダブルクリック
'「ファイルを開く」ダイアログボックスを表示する
If ofdSelectPicture.ShowDialog = DialogResult.OK Then
'pictureBoxに画像をロードする
picShowPicture.Image = Image.FromFile(ofdSelectPicture.FileName)
'フォームのタイトルバーにファイルのパスと名前を表示する
Me.Text = "picture Viewer(" & ofdselectpicture.filename & ")"
End If

「終了」ボタンをダブルクリック
Me.Close()

スタートアップの設定
[Ctrl]+[Alt]+[L]を押し、ソリューションエクスプローラを終了
ソリューションエクスプローラのPicture Viewerを右クリック、プロパティ
スタートアップの設定:fclsViewer
すべてを保存

開始:F5キー


操作

ファイル−新規作成−Windowsアプリケーション
−−−−−−−−−−−−−−−
プロジェクト名:Environment Tutorial
デザイン環境
ウインドウの表示:表示
色:R赤,G緑,B青:黒0,0,0 白255,255,255
プロジェクトプロパティ:スタートアップの設定:
プロジェクトの追加の3方法:プロジェクト。新しい項目の右三角。ソリューションエクスプローラのプロジェクトを右クリックし追加。
オンラインヘルプ:F1。ダイナミックヘルプ。


オブジェクトとコレクション

オブジェクト−−プロパティ と メソッド。
プロパティの参照:オブジェクト名.プロパティ名
−−−−−−−−−−−−−−−
プロジェクトの名前:Properties Example
フォームの名前:fclsDrinkMe
スタートアップの設定:fclsDrinkMe
フォームのTextプロパティ:Grow and Shrink

Buttonコントロールのプロパティ
Name:btnEnlarge
Text:拡大
Location:111,70

Buttonコントロールのプロパティ
Name:btnShrink
Text:縮小
Location:111,120

Me:現在のフォームを表す

拡大
Me.Width = Me.Width + 20
Me.Height = Me.Height + 20

縮小
Me.Width = Me.Width - 20
Me.Height = Me.Height - 20

デバック開始:F5
終了:ツールバーのデバック停止ボタン。デバックーデバックの停止。×。

メソッド
オブジェクトが行うべき動作
オブジェクト名.メソッド名()
−−−−−−−−−−−−−−−
プロジェクトの名前:Object Example
フォームの名前:fclsDrawing
フォームのTextプロパティ:Object Example
スタートアップの設定:fclsDrawing

Buttonコントロールのプロパティ
Name:btnDraw
Text:描画
Location:112,120

描画
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

Buttonコントロールのプロパティ
Name:btnShowNames
Text:コントロール名の閲覧
Location:68,112
Size:160,23

TextBoxコントロール
Labelコントロール

コントロール名の閲覧
Dim intIndex As Integer
For intIndex = 0 To Me.Controls.Count - 1
MsgBox("コントロール" & intIndex & "番目の名前は " & _
Me.Controls(intIndex).Name)
Next intIndex

オブジェクトブラウザ
プロジェクト内のすべてのオブジェクトについて、プロパティやメソッドを閲覧する。
表示−その他のウィンドーオブジェクトブラウザ

イベント

Visual Basicは、イベント駆動型プログラミング
ユーザー操作によって発生ーーーClick等
オブジェクトによって発生ーーーTimerコントロールの Tickイベント等
オペレーティングシステムによって発生ーーーPaintイベント等
イベントプロシージャによって発生

イベントの再帰的発生を防ぐ

プロシージャ名:コントロール名_イベント名
MouseEventArgsオブジェクトの役立つプロパティ
プロパティ名
Clicks マウスボタンをクリックした回数
Button マウスのどのボタンを押したか(左、中、右)を表す
X      マウスをクリックしたときの水平方向の座標
Y      マウスをクリックしたときの垂直方向の座標
イベントのサンプルプロジェクト
−−−−−−−−−−−−−−−
プロジェクト名:Events Example
フォームの名前(Name):fclsEventsDemo
フォームのTextプロパティ:EventsDemo
スタートアップの設定:fclsEventsDemo

TextBoxコントロールのプロパティ
Name:txtEvents
Location:48,120
Size:193,19
Text:Click Me!

Labelコントロールのプロパティ
Name:lblMassage
Location:48,152
Size:192,16
Text:
TextAlign:TopCenter

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

フォームの背景色:BackColor

フォームの背景として画像イメージを追加:BackgroundImage

フォームにアイコンを追加:Icon

フォームがタスクバーに表示されないようにする:ShowInTaskbarをFalse
Alt+Tabで表示

フォームの枠の外観と機能:FormBorderStyle  Sizableデフォルト

ControlBox:True
最小化ボタン:MinimizeBox
最大化ボタン:MaximizeBox

フォームの初期表示位置:StartPosition  CenterParentが最良

フォームを通常の状態、最大化、最小化で表示:WindowsState

マウスポインタを変更:Cursor

フォームを表示する
クラスからオブジェクトを作成する。つまり、インスタンスを作成することを、インスタンス化と呼ぶ。
フォームのインスタンスを作る構文
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()

フォームを閉じる
1.隠す。Visibleプロパティをfalseに。または、Hide()メソッド。
2.完全に閉じる。リソースの開放。Closeメソッド。Me.Close()

fclsMyNewForm.vb[デザイン]
Button追加
Buttonコントロールのプロパティ
Name:btnCloseMe
Text:閉じる
Location:112,112

閉じる
Me.Close()


フォーム2

コントロール
−−−−−−−−−−−−−−−
プロジェクト名:Adding Controls
フォームの名前(Name):fclsAddingControls
フォームのTextプロパティ:Adding Controls
スタートアップの設定:fclsAddingControls
TextBoxコントロールをダブルクリック
Buttonコントロールをドラッグ、ドロップ
ListBoxコントロールを1回クリックし、ドラッグ


グリッド
GridsSize:4,4
グリッドを表示させない:DrawGrid:False
グリッドの機能の解除:SnapToGrid:False


複数のコントロールを一度に選択
1.ドラッグして、複数のコントロールを囲む。黒がアクティブ。
2.Shftキー
−−−−−−−−−−−−−−−
プロジェクト名:Align Controls
フォームの名前(Name):fclsAlignControls
フォームのTextプロパティ:Controls Alignment Example
スタートアップの設定:fclsAlignControls

TextBoxコントロールのプロパティ
Name:txt1
Location:20,20
Multiline:True
Size:100,30
Text:txt1

TextBoxコントロールのプロパティ
Name:txt2
Location:90,80
Multiline:True
Size:50,50
Text:txt2

TextBoxコントロールのプロパティ
Name:txt3
Location:140,200
Multiline:True
Size:100,60
Text:txt3


コントロールを整列
書式ー整列ー左(アクティブコントロールを基準に)


アンカー
コントロールの端からフォームの端までの間隔を一定に保ちながら、コントロールをフォームに配置。
−−−−−−−−−−−−−−−
プロジェクト名:Anchoring Example
フォームの名前(Name):fclsAnchoringExample
フォームのTextプロパティ:Anchoring Example
スタートアップの設定:fclsAnchoringExample

Buttonコントロールのプロパティ
Name:btnAnchor
Anchorプロパティ Top,Left から Left,Right へ


タブオーダーの設定
コントロールから次のコントロールへ
TabIndexプロパティ 0から順に
表示ータブオーダーー順番にクリック
TabStopプロパティをFalseで、Tabキーで移動しない。
−−−−−−−−−−−−−−−
プロジェクト名:Tab Order
フォームの名前(Name):fclsTabOrder
フォームのTextプロパティ:Tab Order Example
スタートアップの設定:fclsTabOrder

TextBoxコントロールのプロパティ
Location:90,120
TextBoxコントロールのプロパティ
Location:90,50
TextBoxコントロールのプロパティ
Location:90,190


コントロールのzオーダー
書式ー順序


最上位にフォームを表示
TopMostプロパティをTrue

透明なフォーム
Opacityプロパティ 100%表示 0%透明
100%から0%に徐々に減らしていくとフォームをフェイドアウトするように表示できる。

スクロール可能なフォーム
物理的なフォームのサイズよりも、フォーム内のコンテンツが大きい場合、スクロールバーを表示。
AutoScroll    :
AutoScrollMinSize :固定的に指定。小さくなると自動的に表示。
AutoScrollMargin :端からコントロールまで、どれだけ領域を確保するか。
−−−−−−−−−−−−−−−
プロジェクト名:AutoScroll Example
フォームの名前(Name):fclsAutoScroll
フォームのTextプロパティ:AutoScroll Example
スタートアップの設定:fclsAutoScroll

Buttonコントロールのプロパティ
Name:btnTest
Text:テスト
Location:110,120

AutoScroll:True
次に
AutoScrollMargin:50,50


MDI(マルチ・ドキュメント・インターフェース)のフォーム
親ウィンドと子ウィンド
−−−−−−−−−−−−−−−
プロジェクト名:MDI Example
フォームの名前(Name):fclsMDIParent
フォームのTextプロパティ:MDI Parent
スタートアップの設定:fclsMDIParent

IsMdiContainer:True
プロジェクトメニューーWindowフォームの追加ー新しい項目の追加ーflcsChild1.vb
Text:Child 1

flcsChild2.vb
Text:Child 2

fclsMDIParent(Form1.vb)
フォーム自身をダブルクリック
イベントハンドラ:Loadイベント
Dim objChild As New flcsChild1()
objChild.MdiParent = Me
objChild.Show()

flcsChild1.vb
Buttonコントロールのプロパティ
Name:btnShowChild2
Text:Child2を表示
Location:105,100
Size:85,23
Clickイベントハンドラ
Dim objchild As New flcsChild2()
objchild.MdiParent = Me.MdiParent
objchild.Show()


コントロール

Labelコントロール
−−−−−−−−−−−−−−−
プロジェクト名:Traditional Controls
フォームの名前(Name):fclsControls
フォームのTextプロパティ:Traditional Controls Example
スタートアップの設定:fclsControls

Labelコントロールのプロパティ
Name:lblMyLabel
Location:5,6
Size:100,25
Text:ラベルは静的な文字列
2行に表示
AutoSize:True ダブルクリックで
で、1行に表示

TextBoxでユーザーに文字列を入力させる
TextBoxコントロールのプロパティ
Name:txtMyTextBox
Location:128,4
Size:136,19
Text:サンプルテキストです

文字列の配置を指定
TextAlign:

複数行
Multiline:True
Text:サンプルテキストです。複数行のテキストボックスでは必要に応じて、ワードラップが起こります。
Size:136,60

データを入力不可にする
Enabled:False

スクロールバーを追加
ScrollBatrs:None-->Vertical

ユーザーが入力する文字数を制限
MaxLength:デフォルトは32,767
TextBoxコントロールのプロパティ
Name:txtRestrict
Location:128,80
Size:136,19
Text:
MaxLength:10


パスワード用のフィールド
文字を入力すると*を表示
PasswordChar:*


ボタン
−−−−−−−−−−−−−−−
プロジェクト名:Button Example
フォームの名前(Name):fclsButtonExample
フォームのTextプロパティ:Button Example
スタートアップの設定:fclsButtonExample

Buttenコントロールのプロパティ
Name:btnClose
Location:104,90
Text:閉じる

TextBoxコントロールのプロパティ
Name:txtTest
Location:92,40
Text:
TablIndex:0

Clickイベントハンドラ
Me.Close()

確定ボタンとキャンセルボタン
確定ボタンは、入力フォームがフォームのどこにあるかに関係なく、ユーザーがEnterを押したときClickイベントを発生。
AcceptButton:btnClose-->確定ボタンを意味する黒い枠

キャンセルボタンは、ユーザーがEscキーを押したときにClickイベントを発生。
CancelButton


ボタンに画像を追加
「閉じる」ボタンを選択
Image:
ImageAlign:


コンテナを用意してオプションボタンのグループを作る
コンテナとは、コントロールを含むことが出来るオブジェクト。
フォームはコンテナ。
パネルとGroupBoxもコンテナ。

−−−−−−−−−−−−−−−
プロジェクト名:Options
フォームの名前(Name):fclsOptions
フォームのTextプロパティ:Options
スタートアップの設定:fclsOptions

GroupBoxコントロールのプロパティ
Name:grpMyGroupBox
Location:48,16
Size:200,168
Text:これはグループボックス

グループボックス上にコントロールを貼り付ける方法
1.一旦、フォームにコントロールを追加し、フォームからコントロールを切り取り、グループボックスを選択し、グループボックス上へペースト。
2.先に、グループボックスを選択し,ツールボックス上のコントロールを、ダブルクリック。
3.グループボックス上で直接ドラッグし、コントロールを描画。
4.グループボックスへ直接コントロールをドロップ。

ツールボックスからCheckBoxコントロールをクリックしたまま、ドラッグ。
CheckBoxコントロールのプロパティ
Name:chkMyCheckBox
Location:16,24
Size:150,24
Text:これはチェックボックス

ラジオボタン 同じコンテナのラジオボタンの中で1つだけ選ばれる。
RadioButtonコントロールのプロパティ
Name:optOption1
Location:16,64
Size:104,24
Text:オプション1

ラジオボタンをコピー&ペースト
RadioButtonコントロールのプロパティ
Name:optOption2
Checked:True
Location:16,96
Text:オプション2


リストボックス
−−−−−−−−−−−−−−−
プロジェクト名: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")

リストをクリア
Clearメソッド
Buttonコントロールのプロパティ
Name:btnClearList
Location:104,224
Size:96,23
Text:リストクリア
Clickイベントハンドラ
lstPinkFloydAlbum.Items.Clear()

リストで選択された項目の情報を取得する
SelectionMode:リストで複数選択できるかを指定

リストボックスのプロパティ
SelectedItemプロパティ
SelectedIndexプロパティ(リストの先頭はインデックス番号0)

フォームのsizeプロパティ
Hight:320
Buttonコントロールのプロパティ
Name:btnShowItem
Location:104,256
Size:96,23
Text:選択項目表示
Clickイベントハンドラ
Debug.WriteLine(lstPinkFloydAlbum.SelectedItem)
Debug.WriteLine(lstPinkFloydAlbum.SelectedIndex)
表示ーその他のウィンドー出力

リストをソート
Sorted:True

コンボボックスを使ってドロップダウンリスト
ComboBoxコントロールのプロパティ
Name:cboAlbum
Location:72,8
Size:160,21
Text:

Items:
Black
Blue
Gold
Green
Red
Yellow

コンボボックスにデータを入力できない。リストから選択。
DropDownStyle:DropDownList


より高度なコントロール

タイマーを作る
−−−−−−−−−−−−−−−
プロジェクト名:Timer Example
フォームの名前(Name):fclsTimerExample
フォームのTextプロパティ:Timer Example
スタートアップの設定:fclsTimerExample

Timerコントロールのプロパティ
Name:tmrClock
Enabled:True
Interval:1000 (ミリ単位)

Labelコントロールのプロパティ
Name:lblClock
BorderStyle:FixedSingle
Location:96,120
Size:100,23
Text:
TextAlign:MiddleCenter

Timerダブルクリックし、Tickイベントハンドラ
lblClock.Text = TimeOfDay


タブ付きダイアログボックス
−−−−−−−−−−−−−−−
プロジェクト名:Tabs Example
フォームの名前(Name):fclsTabs
フォームのTextプロパティ:Tabs Example
スタートアップの設定:fclsTabs

TabControlコントロールのプロパティ
Name:tabMyTabs
Location:8,16
Size:272,208

TabsPages:・・・
追加
Text:連絡先
追加
Text:予定

SelectedIndex-->現在選択されているページのインデックス番号
SelectedIndexChangedイベント-->タブを切り替えると発生


イメージリストに画像を格納
−−−−−−−−−−−−−−−
プロジェクト名:List and Trees
フォームの名前(Name):fclsListandTrees
フォームのTextプロパティ:List and Trees Example
スタートアップの設定:fclsListandTrees

ImageListコントロールのプロパティ
Name:imgMyImages

Images:・・・
追加
16ドット×16ドットのビットマップファイル
TransparentColor:   ?

イメージリストが機能を発揮するのは、他のコントロールと関連付けて、イメージリスト内のイメージを利用する場合。



リストビューを使って高度なリストを作成
ListViewコントロールのプロパティ
Name:lstMyListView
Location:8,8
Size:275,97
SmallImageList:imgMyImage
View:Details

列を作る
ViewプロパティをDetailsにすると、空のヘッダーが上部に表示。このヘッダの内容は、Columnsコレクション内に定義された列により決まる。
Columns:・・・
追加
Text:名前
Width:120
追加
Text:州

リストに項目を追加
Item:・・・
ListViewItemコレクションを起動
追加
Text:James Foxalll
ImageIndex:
SubItems:・・・
追加
Text:ネブラスカ

FullRowSelect:True-->全体行が選択、False-->最初の列が選択


コードを使ってリストビューを操作

追加
lstMyListView.Items.Add("Bob Benzel",)

画像追加
lstMyListView.Items.Add("Bob Benzel",0)

サブ項目をともなう場合の追加
Dim objListItem As ListViewItem
objListItem = lstMyListView.Items.Add("Bob Benzel",)
objListItem.SubItems.Add("ハワイ")

選択された項目をコード内から判別
SelectedItemsコレクション
If lstMyListView.SelectedItems.Count > 0 Then
Debug.WriteLine (lstMyListView.SelectedItems(0).Text)
End If

項目の削除
ItemコレクションのRemoveメソッド
lstMyListView.Items.Remove(lstMyListView.SelectedItems(0))

項目全部削除
lstMyListView.Items.Clear()


ツリービューを使って階層的なツリーを
TreeViewコントロール。Nodesコレクションに含まれる。
TreeViewコントロールのプロパティ
Name:tvwLanguages
ImageList:imgMyImage
Location:8,128
Size:272,97

ツリービューにノードを追加
NodesコレクションのAddメソッドで追加。
Buttonコントロールのプロパティ
Name:btnAddNode
Location:8,240
Size:75,23
Text:ノード追加
ノード追加のイベントハンドラ
tvwLanguages.Nodes.Add("James")
tvwLanguages.Nodes.Add("visual Basic")

Buttonコントロールのプロパティ
Name:btnCreateChild
Location:96,240
Size:80,23
Text:子ノード作成
子ノード作成のイベントハンドラ
Dim objNode As TreeNode
objNode = tvwLanguages.Nodes.Add("James")
objNode.Nodes.Add("Visual Basic")

ノードを削除
If Not(tvwLanguages.SelectedNode Is Nothing) Then
tvwLanguages.Nodes.Remove(tvwLanguages.SelectedNode)
End If

すべてのノードを削除
tvwLanguages.Nodes.Clear()


メニューとツールバー


MainMenuコントロール
−−−−−−−−−−−−−−−
プロジェクト名:Menu and More
フォームの名前(Name):fclsMenuandMore
フォームのTextプロパティ:Menu and More
スタートアップの設定:fclsMenuandMore

MainMenuコントロール ダブルクリック
「ここへ入力」に「ファイル(&F)」
プロパティウィンド
MenuItem1
Name:mnuFileMenu
ファイル(F)の右の「ここへ入力」に「ヘルプ(&H)」
プロパティウィンド
MenuItem1
Name:mnuHelpMenu
ファイル(F)の下の「ここへ入力」に「終了(&Q)」
プロパティウィンド
MenuItem1
Name:mnuQuit

チェックマーク
終了(Q)の下の「ここへ入力」に「閉じる前に確認する」
プロパティウィンド
MenuItem1
Name:mnuAskBeforeClosing
Checkedプロパティ:True

メニューに関するコードを書く
終了メニューをダブルクリック
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

F5で実行し、Alt+Fで、ファイルメニューをドロップダウン。
「閉じる前に確認する」メニューをクリックし、チェックマークを解除。もう一度押し、チェックマークを付ける。
「終了」メニューをクリックして、MsgBoxが出る。
「はい」で、終了。


ショートカット***ContextMenuコントロール
ショートカットは、右クリックしたときに表示される、ポップアップ形式のメニュー。
TextBoxコントロールのプロパティ
Name:txtMyTextbox
Location:96,122
Size:100,19
Text:

ContextMenuコントロール
フォームの下部のContextMenu1をクリックすると、上部にも表示。
上部のものを、クリック。
その下に費用辞される、「ここへ入力」に、「テキストボックスをクリアする」と入力。
プロパティウィンド
MenuItem1
Name:mnuClearTextbox

「テキストボックスをクリアする」メニューをダブルクリック
txtMyTextbox.Text = ""

txtMyTextboxのテキストボックスのプロパティ
ContextMenuプロパティ:ContextMenu1


ショートカットキー***ShortCutプロパティ
ショートカットキーは、例えば印刷が、Ctrl+p等。
フォームの下部のMainMenu1をクリックすると、上部にも表示。
上部の「ファイル」をクリックし、「終了」をクリック。
「終了」のプロパティ
ShortCutプロパティ
下向き三角ボタン
CtrlQ-->Ctrl+Qで、[ファイル」「終了」と同じ動作をする。


ツールバー***toolBarコントロール
toolBarコントロールのプロパティ
Name:tbrMainToolbar

ImageListコントロールのプロパティ
Name:imgMyPictures
Images:ビットマップを追加

toolBarコントロールのプロパティ
ImageList:設定
Buttons:追加
Name:tbbQuit
ImageIndex:0
Text:空にする(終了)文字が画表示される
ToolTipText:プログラムを終了する

tbrMainToolbarボタンをダブルクリック
If e.Button Is tbbQuit Then
Me.Close()
End If


トグルボタン
toolBarコントロールのプロパティ
Buttons:追加
Name:tbbInvisible
Text:非表示
Style:ToggleButton

toolBarコントロールのプロパティ
TextAlign:Underneath<-->Rightーーー表示が下か、右か。

tbrMainToolbarボタンをダブルクリック
Select Case tbrMainToolbar.Buttons.IndexOf(e.Button)
Case 0
Me.Close()
Case 1
txtMyTextbox.Visible = Not (tbbInvisible.Pushed)
End Select
インデックス番号は、左から数えて、最初が0,1,2,・・・
 

ツールパーに区分瀬(セパレータ)を追加
toolBarコントロールのプロパティ
Buttons:追加
Name:tbbSeparator1
Style:Separator
リストの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


ツールバーのボタンにドロップダウンメニューをつける
toolBarコントロールのプロパティ
Buttons:追加
Name:tbbDropDown
Text:
Style:DropDownButton
DropDownMenu:ContextMenu1


ステータスバー***StatusBarコントロール
StatusBarコントロール
Name:sbrMyStatusBar
Text:Menu and Toolbars Example
SizingGrip:Falseーーーサイズ変更グリップを非表示
Panels:追加
Text:パネルの内容
AutoSize:Contents

ステータスバー
ShowPanels:True


描画


Graphicsオブジェクト
GDI(グラフィックス・デバイス・インターフェース)

フォームやコントロール用にGraphicsオブジェクトを作成
フォームやコントロールが持っているCreateGraphicsメソッドを呼び出して作る。
Dim objGraphics As Graphics
objGraphics = TextBox1.createGraphics()

グラフィックオブジェクトを使い終わったら、リソースを開放するため、 Disposeメソッドを呼び出す。

新しく作成したビットモップ用に、Graphicsオブジェクトを作成ーーーBitmap メモリ上のビットマップを使う
オブジェクト変数 = New Bitmap(幅,高さ,フォーマット)
フォーマットの例
Format16bppGrayScales:1つのピクセルにつき16ビットで色を表す。グレー色の濃淡を65,536種類で表す。
Format16bppRgb555:1つのピクセルにつき16ビットで色を表す。赤、緑、青をそれぞれ5ビットで表し、合計32,768種類の色を使用する。
Format24bppRgb:1つのピクセルにつき24ビットで色を表す。赤、緑、青をそれぞれ8ビットで表し、合計16,777,216種類の色を使用する

例えば、幅640ピクセル、高さ480ピクセル、色を24ビットで表すビットマップをメモリに作るのであれば、
objMyBitMap = New Bitmap( _
640,480,Drawing.Imaging.PixelFormat.Format24bppRgb)
メモリ上にビットマップを作成した後、そのビットマップに描画するGraphicsオブジェクトを作るには、FromImageメソッドを使う。
objGraphics = Graphics.FromImage(objMyBitMap)


ペンを使う
オブジェクト変数 = New Pen(色,幅)
DashStyleプロパティ
Dash:ダッシュ状の線(網掛け上の線)。
DashDot:ダッシュとドットからなる線。
DashDotDot:ダッシュと2つのドットの繰り返しからなる線。
Solid:実線。
Custom:独自のダッシュ線。

例えば、新しいペンを作り、それを使って点線を描く
Dim objMyPen As Pen
objMyPen = New Pen(Drawing.Color.ParkBlue,3)
objMyPen.DashStyle = Drawing.Drawing2D.DashStyle.Dot

標準のペン
Sytem.Drawing.Pensクラスの構成メンバ
objPens = Sytem.Drawing.Pens.DarkBlue


システムカラーを使う
システムカラーの変更ーーディスクトップを右クリックーープロパティーー画面のプロパティーーデザイン


四角形領域を使うーーー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)

四角形領域の拡大と縮小
オブジェクト.Inflate(幅を変化させる量,高さを変化させる量)


図形を描画する
線を描くーーーGrapphicsオブジョクトのDrawLineメソッド
四角領域を必要としない
オブジェクト.DrawLine(ぺん,x1,y1,x2,y2)

四角形を描画ーーーGrapphicsオブジョクトのDrawRectangleメソッド
オブジェクト.DrawRectangle(ぺん,四角領域)
又は
オブジェクト.DrawRectangle(ぺん,x,y,幅,高さ)

円や楕円ーーーGrapphicsオブジョクトのDrawEllipseメソッド
GrapphicsオブジョクトのClearメソッド又は
オブジェクト.DrawEllipse(ぺん,x,y,幅,高さ)

描画領域のクリアーーーGrapphicsオブジョクトのClearメソッド
objGraphics.Clear(Drawing.SystemColors.Control)


文字列を表示ーーーGrapphicsオブジョクトのDrawStringメソッド
オブジェクト.DrawString(文字列,フォント,ブラシ,x,y)
x,tは左上端の座標

フォントオブジョクトを新しく作る
Dim objFont As Font
objFont = New System.Drawing.Font("Arial",30)
Arialは、フォント名
30は、ポイントサイズ

スタイルを標準意外にしたのなら
objFont = New System.Drawing.Font("Arial",30 _
FontStyle.Bold or FontStyle.Italic)

既存のフォントオブジェクト。フォームが使っているフォントを利用した例
objGraphics.DrawString("これは表示される文字列です。", Me.Fonta _
System.Drawing.Brushes.Azure, 0 0)


フォーム上に常にグラフィックスが描画された状態にする
・フォームのPaintハンドラで、フォームに描画するすべてのコードを書く
・メモリ上に作成したビットマットに描画を行い、フォームのPaintハンドラ内で、ビットマップの内容をフォームにコピーする。

2番目の方法が勝っている。


グラフィックを表示するサンプル
−−−−−−−−−−−−−−−
プロジェクト名:Persisting Graphics
フォームの名前(Name):fclsMain
フォームのTextプロパティ:Persisting Graphics
スタートアップの設定:fclsMain

TextBoxコントロールのプロパティ
Name:txtInput
Location:56,184
Size:100,19
Text:

Buttonコントロールのプロパティ
Name:btnDrawText
Location:160,184
Text:文字列描画
メモリ上のビットマップを使い、そのビットマップからフォームに転送することで、描画する。


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")




オートメーション


・オートメーション用のライブラリに対し参照設定を行う
・オートメーションサーバのインスタンスを作る
・オートメーションサーバのオブジェクトを操作する

−−−−−−−−−−−−−−−
プロジェクト名:Automate Excel
フォームの名前(Name):fclsMain
フォームのTextプロパティ:Automate Excel
スタートアップの設定:fclsMain

Buttonコントロールのプロパティ
Name:btnAutomateExcel
Location:96,128
Size:104,23
Text:オートメーション


オートメーション用のライブラリに対して参照設定を行う
 サーシーバーのタイプライブラリに参照設定をする。
 設定を行うと、サーバーが提供するオブジェクトを、
 あたかもVisual Basic.NETのオブジェクトのようにアクセスできる。

 プロジェクトーー参照の追加ーーCOMタブーーMicrosoft Excel xx Object Library
 Visual Basic.NETはCOMのオブジェクトに直接対話が出来ない。
 ラッパー(Wrapper)を経由して、アクセス。

オートメーションサーバのインスタンスを作成
 「オートメーション」ダブルクリック
         Dim objExcel As Excel.Application()

サーバを操作
 Excelを見えるようにする。(見えないまま、作業することも可能)
        objExcel.Visible = True
 ワークブックを作る
        objExcel.Workbooks.Add()
 ワークブックを使ってデータを編集
  ワークブックには、デフォルトでワークシートがある。
  ・ワークシートの4つのセルにデータを追加
  ・4つのセルを選択
  ・選択したセルの合計を求め、5番目のセルに結果を追加
  ・5つのセルを太字(ボールド)で表示
  
  ワークシートのセルの操作は、Applicationオブジェクトのプロパティ
  であるActiveCellオブジェクトを使用。

  セルの選択は、RangeオブジェクトのSelectメソッドを呼び出す。
  その後、ActiveCellオブジェクトのFormulaR1C1プロパティ値を設定。

  Excelの終了はApplicationオブジェクトのQuitメソッド

        Dim objExcel As New Excel.Application()
        objExcel.Visible = True
        objExcel.Workbooks.Add()

        objExcel.Range("A1").Select()
        objExcel.ActiveCell.FormulaR1C1 = "75"
        objExcel.Range("B1").Select()
        objExcel.ActiveCell.FormulaR1C1 = "125"
        objExcel.Range("C1").Select()
        objExcel.ActiveCell.FormulaR1C1 = "255"
        objExcel.Range("D1").Select()
        objExcel.ActiveCell.FormulaR1C1 = "295"

        objExcel.Range("E1").Select()
        objExcel.ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-1]"

        objExcel.Range("A1:E1").Select()
        objExcel.Selection.Font.Bold = True




アプリケーションを配布


カスタムセットアッププログラムを作成
 新しいプロジェクト
 セットアップ/デプロイメントプロジェクト
 右ーーセットアッププロジェクト
 (Webアプリケーションを配布するときは、Webセットアッププロジェクト)

  プロジェクト名ーーTYVB Picture Viewer
          (Teach Yourself Visual Basic)

 ファイルシステムエディタ
 
 配布したいプログラムファイルを追加
 ソリューションエクスプローラ
 ソリューション右クリックーー追加ーー既存のプロジェクト
 Picture Viewerーー選択ーー開く

 セットアッププロジェクトに対して、Picture Viewer追加
 1.ソリューションエクスプローラで、TYVB Picture Viewer選択
 2.プロジェクトーー追加ーープロジェクト出力
 3.プロジェクト欄が Picture Viewe
   リストボックス内 プライマリ出力 を確認
 4.OK
 5.左ーーアプリケーションホルダ
   右ーーPicture Viewe(・・プライマリ出力)と表示される
 Picture Viewerプロジェクトをビルドしたときに作成される EXE ファイルが
 ユーザーのアプリケーションホルダに配布されるようになる。


ファイルのインストール先を変更
 アプリケーションフォルダのデフォルト
  \Program Files\開発\製品名

 ファイルシステムエディターーアプリケーションフォルダ右クリックーー
 プロパティウィンドーーDefaultLocationプロパティ
 [ProgramFilesFolder][Manufacturer]\[ProductName]
 を次に。企業名がなくなる例。
 [ProgramFilesFolder]\[ProductName]

プロジェクト出力のビルドオプションを指定
 EXEファイルに割り振るアイコンの変更
  ソリューションエクスプローラーーPicture Viewer右クリックーープロパティ
  共有プロパティーービルドーーアプリケーションアイコン

インストールすべきファイルを追加する
 ソリューションエクスプローラーーTYVB Picture Viewer
 プロジェクトーー追加ーーファイル

インストール時にカスタムフォルダを作成
 ファイルシステムエディタの左ペインはインストール先である
 ユーザのコンピュータのフォルダに相当する。

 左の「対象コンピュータ上のファイルシステム」右クリック
 特別なフォルダの追加
 カスタムフォルダ
 フォルダ名 Pictures
 左の アプリケーションホルダ クリック
 右の ビットマップファイルを Picturesにドラッグ&ドロップ

スタートメニューにショートカットを作る
 デフォルトではショートカットを作成しない。
 
 例
 スタートメニュー内のプログラムメニューに配置。
 ファイルシステムエディターーアプリケーションフォルダ左クリック
 右ペイントからPicture Viewer右クリック。
 Picture Viewer出力へのショートカット 選ぶ。
 ユーザーのプログラムメニュー にドラッグ&ドロップ。
 Picture Viewer出力へのショートカット をクリックし、
 少し間を置いてもう一度クリックで名前を変更。

セットアッププログラムのビルド構成を定義
 デバック情報を取り除き、デバッグ版ではなくリリース版を作る。
 ビルドーー構成マネージャ
 アプリケーションの構成ーーDebug-->Release

共通言語(CLR)をインストール
 マシンに共通言語ランタイムをインストールすると、
 Visual Studio.NETで開発したプログラム(Visual Basic.NET,C#)を、
 そのコンピュータで実行することが出来る。

 共通言語ランタイムをインストールするためには、再配布可能な、
 Dotnetfx.exeをユーザーマシン上で実行する必要がある。

 ソリューションエクスプローラーーTYVB Picture Viewer
 プロジェクトーー見つかった依存関係
 に dotnetfxredist_x86_jpn.msm は共通言語ランタイムの一部
 ExcludeプロパティーーTrue

セットアッププログラムをビルドする
 ビルドーーソリューションのビルド
 作成されたセットアッププログラムは、
 TYVB Picture Viewer フォルダの Releaseフォルダの、 
 拡張子 *.msj を持つ TYVB Picture Viewer.msj 。

 ダブルクリックでインストール開始。

 Windows Installerがターゲットマシンにない場合は、
 他の4つのファイル(InstMsiA.Exe,InstMsiW.Exe,Setup.Exe,Setup.Ini)も配布必要。
 その際、インストールは Setup.exe を実行。
 
 スタートメニューの プログラムメニューに、
 「Picture Viewerへのショートカット」が追加される。



配布したアプリケーションをアンインストールする
 スタートーー設定ーーコントロールパネルーー
 アプリケーションの追加と削除
 TYVB Picture Viewer




.NET Frameworkオーバービュー


共通言語ランタイム(CLR:Common Language Runtime)
 
中間言語(Microsoft Intermediate Language)

名前空間

共通型システム(Common Type System)

ガベージコレクション



ホームへ