プログラムの概要
連動するドライブリストボックス、ディレクトリリ ストボックス、ファイルリストボックスから画像フ ァイルを選択してクリックします。 ピクチャーボックスに選択した画像が実物大で表 示される。此の時、画像が表示領域より大きい場合 は、画像の大きさに応じてスクロールバーが表示さ れる。此のスクロールバーを操作する事に依り、画 像全体を見る事が出来る。 終了ボタンをクリックすると、プログラムをメモリ から消去して終了する。画像閲覧プログラム
VB 2005 ③ □ 単純変数の宣言(Private) □ コンポーネントの組込(DriveList、DirList、FileList) □ Windows フォームコントロールの利用(Panel、PictureBox、GroupBox、RadioBottin、Button) □ プロパティの値の取得と設定(Path、Drive、FileName、Pattern、SizeMode、Image 等) □ イベントの利用(Load、Click、SelectedIndexChanged、Change) □ メソッドの利用(Dispose、FromFile) □ ステートメントの利用(End) □ 組込関数の利用(Right) □ 演算子(代入演算子、比較演算子、結合演算子) □ 制御構造構文(条件分岐、制御ステートメント) 今回の課題項目 □ 変数の適用範囲(スコープ:フォームモジュールレベル、サブプロシージャレベル) □ If文に依る条件分岐(If ~ Then … Else … End If)□ ファイルシステムコントロールの利用(各コントロールの連動) □ 画像の読込と転送(Image オブジェクト、FromFile メソッド)
今回の重点項目
□ 表示画面のサイズに合わせてフィット表示する機能(縦横の比率を変えない)を追加する。 今回の応用項目
■ ツールボックスにアイテム追加 ■ 今回使用するコントロールの内、ドライブリストボックス、ディレクトリリストボックス、ファイルリ ストボックスは、標準では、ツールボックスには表示されて居ない。標準でツールボックスに表示され て居ないコンポーネントを追加して使用出来る様にする手順は、下記の通りで有る。 此処では、ツールボックスのコンポーネントに追加すると仕て、コンポーネント部を開き、余白部分で 右クリックして表示されるポップアップメニューで『アイテムの選択』をクリックする。
下記のダイアログの『.NET Framework コンポーネント』タブで、DriveListBox、DirListBox、 FileListBox にチェックを入れて、OK ボタンをクリックする。
■ オブジェクト・プロパティ一覧 ■ コントロールの種類 プロパティ プロパティの設定値 フォーム Name viewer Text 画像ビューアー FormBorderStyle FixedSingle StartPosition CenterScreen ドライブリスト Name drvViewer ディレクトリリスト Name dirViewer ファイルリスト Name filViewer パネル Name pnlViewer BackColor White AutoScroll True ピクチャーボックス Name picViewer SizeMode AutoSize グループボックス Name grpViewer Text 表示方法 ラジオボタン1 Name radReal Text 実物大表示 Checked True ラジオボタン2 Name radFit Text フィット表示 ボタン Name BtnFinish Text 終了 ラジオボタン1 ボタン ピクチャーボックス パネル グループボックス ドライブリストボックス ディレクトリリストボックス ファイルリストボックス ラジオボタン2
ドライブリストボックス システムの有効なドライブ一覧を表示するコントロール ディレクトリリストボックス カレントディレクトリの階層構造を表示するコントロール ファイルリストボックス 指定したディレクトリ内のファイル一覧を表示するコントロール パネル 他のコントロールをグループ化する為のコンテナと成るコントロールで有る。通常は、機能別 にフォームを細分化する為に使用する。亦、BackgroundImage プロパティを設定すると、コ ントロールの背景にイメージが表示される。 ピクチャーボックス ビットマップ、アイコン、メタファイル、JPEGファイル、GIFファイル等の画像を表示 するコントロール。従来のバージョン(VB 6.0)の様に、描画メソッドを用いて描画する事 や、内部に他のコントロールを配置してコンテナと仕て使用する事はは出来ない。 グループボックス 他のコントロールをグループ化する為のコンテナと成るコントロールで有る。通常は、機能別 にフォームを細分化する為に使用する。パネルと同様の機能を持つが、グループボックスでは キャプションを表示する事が出来る。 ラジオボタン 複数の項目から1つを選択するコントロール。同じパネルやグループボックスに配置された複 数のラジオボタンを1グループと仕て使用する。 ボタン ユーザーが選択したコマンド(命令)や操作を実行するコントロール。OKボタンや実行ボタ ン等、処理の開始や中断・終了の合図に用いられ、最も良く利用されるコントロールで有る。 ボタンが押し下げられた様に外観が変わる為、プッシュボタンとも謂う。 算術演算子 比較演算子 論理演算子 1.^ 冪乗 1.= 等しい 1.Not 否定 2.- 負数 2.<> 等しくない 2.And 論理積 3.*、/ 乗算と除算 3.< より小さい 3.Or 論理和 4.¥ 整数除算 4.> より大きい 4.Xor 排他的論理和 5.Mod 剰余 5.<= 以下 5.Eqv 同値 6.+、- 加算と減算 6.>= 以上 6.Imp 包合 算術演算子と論理演算子では、複数の演算子が使用されて居る場合には、頭に付けた番号の順序で 演算が行われる(上に書かれて居る演算子程優先順位が高い)。
■ プログラムリスト ■
Public Class viewer
' フォームレベルでグローバルな変数の宣言 Private Fname As String
' フォームが読み込まれた時の処理
Private Sub viewer_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles MyBase.Load picViewer.Top = 0 picViewer.Left = 0 filViewer.Pattern = "*.bmp;*.jpg;*.jpeg;*.gif;*.ico;*.png;*.tiff;*.exif;*.wmf;*.emf" End Sub ' ドライブリストボックスの選択項目が変更された時の処理
Private Sub drvViewer_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles drvViewer.SelectedIndexChanged dirViewer.Path = drvViewer.Drive
End Sub
' ディレクトリリストボックスの内容が変更された時の処理
Private Sub dirViewer_Change(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles dirViewer.Change
filViewer.Path = dirViewer.Path End Sub
' ファイルリストボックスの選択項目が変更された時の処理
Private Sub filViewer_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles filViewer.SelectedIndexChanged Dim F As String
' ファイル名の設定 F = filViewer.Path
If Not Microsoft.VisualBasic.Right( F, 1 ) = "¥" Then F &= "¥" F &= filViewer.FileName
' 画像の読込
picViewer.Image = Image.FromFile( F ) End Sub
' ボタン(終了)がクリックされた時の処理
Private Sub btnFinish_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnFinish.Click Me.Dispose( ) End Sub 此処でPrivate 宣言した変数は同 じフォーム内の総てのサブプロシ ージャで値の参照と設定を行う事 が出来る。 プログラムを起動した時に行う初 期設定は、通常フォームの Load イベントで行う。 ファイルリストに表示するファイ ルの種類を設定する。 此の場合のイコール(=)記号は、 代入演算子で有り、右辺の値を左 辺に代入する働きをする。 SelectedIndexChanged ではなく Chenge でないと、ファイルリス トボックスと連動しない。 此の場合のイコール(=)記号は、 比較演算子で有る。 A=B : AとBは等しい アプリケーションを終了する場 合、正しくプログラムをメモリか ら消去して終了する。 ピクチャボックス等に画像を表示 する方法は、他にも色々と用意さ れて居る(後述)。
' ラジオボタン(実物大表示)がクリックされた時の処理
Private Sub radReal_Click( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles radReal.Click
picViewer.SizeMode = PictureBoxSizeMode.AutoSize pnlViewer.AutoScroll = True
End Sub
' ラジオボタン(フィット表示)がクリックされた時の処理
Private Sub radFit_Click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles radFit.Click picViewer.SizeMode = PictureBoxSizeMode.StretchImage picViewer.Size = pnlViewer.Size pnlViewer.AutoScroll = False End Sub End Class 画像ファイルを表示 下 記 の 例 は 、PictureBox1 に 画 像 フ ァ イ ル "C:¥...¥xxx.jpg" を 表 示 さ せ る 方 法 で 有 る 。 System.Drawing 名前空間の Image クラスを使用して居る。
Private Sub xxx(...) Handles xxx.xxx
PictureBox1.Image = Image.FromFile("C:¥...¥xxx.jpg") End Sub
ヘルプでは、下記の様にSystem.Drawing 名前空間の Bitmap クラスを使用した例が記載されて 居る(左上隅が (60, 10) の位置に表示される)。此の場合、Paint イベントで書き直さないと消え て仕舞う。
Private Sub xxx(...) Handles xxx.xxx Dim P As New Bitmap("C:¥...¥xxx.jpg")
Dim G As Graphics = PictureBox1.CreateGraphics( ) G.DrawImage(P, 60, 10)
End Sub
亦、DrawImage メソッドを使用してメタファイルを表示するには下記の様にする。 Private Sub xxx(...) Handles xxx.xxx
Dim P As New Metafile("C:¥...¥xxx.wmf")
Dim G As Graphics = PictureBox1.CreateGraphics( ) G.DrawImage(P, 60, 10) End Sub 此処で紹介した例では、DrawImage メソッドに画像を表示する座標しか指定して居ないが、此れ ではGDI+の自動スケーリングが働いて仕舞う可能性が有る。此れを回避する為には、元の画像の 大きさを指定してDrawImage メソッドで描画する。 SizeMode プロパティを AutoSize に設定すると、コントロールのサ イズが、画像のサイズに変化する。 一方、StretchImage に設定する と、画像のサイズが、コントロー ルのサイズに変化する。
DriveListBox の Drive プロパティ ドライブを設定・取得するプロパティ Object.Drive = ドライブ名を表す文字列 ドライブリストボックスコントロールで実行時に選択されて居るドライブの設定や取得を 行う。デザイン時には使用する事は出来ない Drive プロパティの設定を変更する場合、下記の様な点に注意する必要が有る。 ・文字列の最初の1文字丈が有効で有る。但し、大文字と小文字は区別されない。 ・Drive プロパティの設定が変更されると SelectedIndexChanged イベントが発生する。 ・存在しないドライブを指定するとエラーが発生する。 ・Drive プロパティの設定が変更されると、其の時有効なドライブが自動的に再度チェックされる。此 れに依り、実行中に接続されたネットワーク上のドライブを調べる事が出来る。
DirListBox と FileListBox の Path プロパティ
パスを設定・取得するプロパティ Object.Drive = パス名を表す文字列 現在展開されて居るディレクトリのカレントパスの設定や取得を行う。デザイン時には使用 する事は出来ない。 Path プロパティの値は、"C:¥Ob"、"C:¥Windows¥System" 等、パスを示す文字列で有る。ディレク トリリストボックスコントロール、又は、ファイルリストボックスコントロールの場合、実行時にコン トロールが作成された時の、現在のパスが既定値に成る。Application オブジェクトの場合、アプリケ ーションを開発環境で実行して居る時は、プロジェクトの VBP ファイルの絶対パスを示す。一方、ア プリケーションの実行可能ファイル(EXE)を実行して居る時は、実行ファイルの絶対パスを示す。 Path プロパティを使用すると、アプリケーションでファイルを参照したり、操作したりする事が出来 る。Path プロパティの設定方法は、MS-DOS の chdir コマンドと同じで有る。即ち、相対パスでも指 定可能で有り、ドライブ名は省略する事が出来る。ドライブ名とコロン( : )丈を指定すると、其のド ライブのカレントディレクトリが選択される。
亦、下記に示す様に、Path プロパティでは、ドライブ名を指定せずにネットワークのパス丈を指定す る事も出来る。下記で、servername はサーバー名、sharename はシェア名、path はパス名を示す。
¥¥servername¥sharename¥path 此の時、Drive プロパティには、長さ 0 の文字列( "" )が設定される。 Path プロパティの値を変更すると、ディレクトリリストボックスコントロールでは、Change イベント が発生し、ファイルリストボックスコントロールでは、PathChange イベントが発生する。 機 能 書 式 解 説 機 能 書 式 解 説
FileListBox の FileName プロパティ ファイルのパスとファイル名を設定・取得するプロパティ Object.FileName = パス名とファイル名を含む文字列 ファイルリストボックスコントロールで、其の時に選択されて居るファイルのパスとファイ ル名の設定と取得を行う。デザイン時には設定する事は出来ない。 FileName プロパティは、リスト内の現在選択(強調表示)されて居るファイル名を返す。パス名は Path プロパティを使用してファイル名とは別に返す。FileName プロパティの値は、List(ListIndex) プロパ ティの値と等しく成る。ファイルが選択されて居ない時は、FileName プロパティは、長さ 0 の文字列 を返す。 此のプロパティを設定する時は、下記に示す点に注意する必要が有る。 ・ドライブ、パス、パターンを含む文字列をファイル名と仕て指定すると、Drive、Path、Pattern の 各プロパティも変更される。 ・既存のファイル名(含ワイルドカード)を文字列に指定すると、其のファイルが強調表示される。 ・FileName プロパティを変更すると、変更の内容に応じて、PathChange(パスを変更した場合) PatternChange(パターンを変更した場合)、DblClick(既存のファイル名を直接指定した場合)の 各イベントが発生する。 ・次の構文を使用して、FileName プロパティに有効なネットワークパスとファイル名を指定する事も 出来る。¥¥servername¥sharename¥pathname FileListBox の Pattern プロパティ 表示されるファイル名を示すパターンを設定・取得するプロパティ Object.Pattern = パターを表す文字列 実行時にファイルリストボックスコントロールに表示されるファイル名を示すパターンの 設定と取得を行う。 パターンを表す文字列には、"*.*" や "*.FRM" の様な、ファイルを特定する文字列式を指定する。既 定値は、総てのファイルの一覧を表示する "*.*" で有る。此のワイルドカード以外にも、セミコロン( ; ) で区切って複数のパターンを指定する事も出来る。例えば、"*.COM;*.EXE; *.BAT" と設定すると、総 ての実行可能ファイルとMS-DOS バッチファイルの一覧が表示される。 Pattern プロパティは、ファイルの参照や操作を行う処理で使用される。Pattern プロパティを他のフ ァイル制御用のプロパティと組み合わせる事に依り、ファイルを調べたり、分類したりする事が出来る 様に成る。例えば、他のプログラムを起動するアプリケーションでは、ファイルリストボックスを使用 してファイル選択をする処理で、実行可能ファイル(*.exe)丈を表示する様に出来る。其の他のファイ ル制御プロパティと仕て、Drive、FileName、Path の各プロパティが有る。 猶、Pattern プロパティの値を変更すると、PatternChange イベントが発生する。 機 能 書 式 解 説 機 能 書 式 解 説
PictureBox オブジェクトの SizeMode プロパティ
イメージの配置方法を指定するプロパティ
Object.SizeMode = PictureBoxSizeMode 列挙体
PictureBoxSizeMode 列挙体のメンバを使用して、ピクチャボックスのイメージの配置方法 の設定と取得を行う。 PictureBoxSizeMode 列挙体には、AutoSize(コントロールのサイズがイメージと同じ大きさに成る)、 CenterImage(イメージは中央に表示される)、Normal(イメージはコントロールの左上隅に配置され る)、StretchImage(イメージのサイズがコントロールのサイズに調整される)が有る。 Dispose メソッドに依るオブジェクトの破棄 コンポーネントに依り使用されて居るリソースを開放するメソッド Object.Dispose( ) フォーム、又は、オブジェクトをメモリから消去する。 プログラムを終了する場合や、使用中のメモリを他の用途に使う場合や、プロパティを元の値にリセッ トする場合等に使用される。 フォームをメモリからアンロードする時には、表示されて居る構成要素だけがアンロードされ、其のフ ォームモジュールのコードはメモリに保持されるが、総てのフォームがアンロードされ、実行するコー ドが無く成れば、其の時点で、イベントドリブンのアプリケーションは終了する。 猶、フォームの『閉じる』ボタンをクリックしたり、フォームのClose メソッドを使用すると、自動的 にDispose メソッドが呼び出され、其のフォームのリソースは開放される。但し、ShowDialog メソッ ドに依りモーダル表示されたフォームでは、フォームの『閉じる』ボタンをクリックしたり、フォーム のClose メソッドを使用しても、自動的に Dispose メソッドが呼び出される事は無い。モーダル表示の フォームのリソースを開放する為には、明示的にDispose メソッドを使用する。 End ステートメントに依るプログラムの終了 プログラムの実行を終了させるステートメント End 実行中のアプリケーションを直ちに終了させる。 End ステートメントより後のコードは実行されず、亦、End ステートメントを実行した後はイベントも 発生しない。 プログラムの通常の終了の場合には、総てのフォームをアンロードする必要が有るが、End ステートメ ントは、プログラムを強制的に停止させる手段を提供して居る。 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説
.NET Framework 対応 ■ コントロールの配置位置の設定 従来の記述法 picViewer.Top = 0 picViewer.Left = 0 .NET Framework の記述法
picViewer.Location = New Point(0, 0)
.NET Framework では、コントロールの配置位置を設定するには、Top プロパティと Left プロパティ ではなく、Location プロパティを使用する事が出来る(孰れでも、結果は同じ)。
■ 文字列の終端文字の取得
従来の記述法
If Not Microsoft.VisualBasic.Right(F, 1) = "¥" Then F &= "¥"
.NET Framework の記述法
If Not F.EndsWith("¥") Then F &= "¥"
.NET Framework では、文字列の終端文字を取得するには、String クラスの EndsWith メソッドを使 用する。 ■ ドライブリストボックス・ディレクトリリストボックス・ファイルリストボックス 此等は、従来のコンポーネントで有るが、.NER Framework でもサポートされて居り、従来通り、使 用する事が出来る。 用途が、ドライブやディレクトリ(フォルダ)やファイルの指定に特化されて居る為、他の用途に使用 する事は難しいが、当該目的で使用するには、ComboBox コントロールや ListBox コントロール等で自 作するよりは、非常に簡単で有る。