Visual Basic 初級講座
VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

 

Visual Basic 中学校 > 初級講座 >

第24回 標準でないコントロール

標準では使用できないコントロールも自分で自由に追加して使用することができます。あらかじめ用意されているコントロールもありますし、店で買ったり、インターネットでダウンロードしてきたりするものもあります。今回はこのような標準ではないコントロールの紹介と、あなたのプログラムへの取り込み方を説明します。

この回の要約

・ドライブの一覧を表示・選択するDriveListBoxコントロールは、VBがインストールされているばすぐに使用できる非標準コントロール。

・Process.Startを使うとexeを実行したり、テキストやmp3を開くことができる。

・COMコンポーネントである ToggleButton を使うと、押すとへこみっぱなしになるボタンをフォームに追加できる。

・私が作ったShapeコントロールをダウンロードしてフォームに貼り付けることができる。

・私が作ったShapeコントロールは線・円・四角などの図形をプロパティだけで簡単に描画し、グラデーション等の色指定もできる。

 

1.「標準でないコントロール」とは

 

「標準コントロール」という言葉はとても曖昧(あいまい)に使われています。実際マイクロソフトがあるコントロールを標準であるとか標準でないとか決めているわけではないので無理もありません。

Visual Basic 中学校でははじめからツールボックスに並んでいてすぐにでも使用可能になっているコントロールを「標準コントロール」と呼んでいます。これは多くの人の言葉遣いと一致するものと思います。

となると「標準でないコントロール」とは、はじめはツールボックスに並んでいないが後から追加して使用することができるコントロールということになります。

VBにははじめからこの「標準でないコントロール」がいくつか用意されていますし、マイクロソフト以外の会社が作ったコントロールを取り込んで使用したり、自分でコントロールを作ることもできます。

このようにコントロールは自由に増やすことができるためVB(やVC#やVCなど)は非常に拡張性に富んでいます。

標準でないコントロールには大きく分けて次の2種類があります。

.NET Framework コンポーネント 「標準でない」というだけで普通のコントロールと同じです。ボタンやラベルなどの使い方がわかっていればこれらのコントロールも同じような手法で使うことができます。
COM コンポーネント ActiveXコントロール(読み方:ActiveX = アクティブエックス)とも呼ばれます。通常のコントロールとは根本的に違う仕組みなのですが、プログラムする上では違いを意識しなくてもすみます。しかし、.NETの常識が通用しない場合もあります。

■表1:標準でないコントロール

今回は「コントロール」の詳しい性質について扱うのではなく、いかにして標準でないコントロールをツールボックスに追加し、フォームに配置し、プログラムで使用するのかを概略的に説明します。

 

2.ドライブリストボックス

 

それでは、手始めに初めからVBに付属していて、使い方も簡単な非標準コントロール「ドライブリストボックス」を実際にプログラムで使用する手順を説明します。

ドライブリストボックスはコンボボックスのようなコントロールで、コンピュータのドライブを選択するためのコントロールです。

まず、新しいプロジェクトを作成してデザイン画面にしてから、[ツール]メニューの[ツールボックス アイテムの追加と削除...]をクリックします。

そうすると少し時間がかかりますがコントロールの一覧が表示されます。一覧にやけにたくさんのコントロールが並んでいて驚かれる方もいるでしょう。残念ながらこの一覧に並んでいるコントロールのすべてが使用可能というわけではありません。また、この一覧の内容はパソコンの環境により異なります。

■画像1:.NET Frameworkコンポーネントの一覧

このダイアログ画面のタブで「.NET Framework コンポーネント」が選択されているのを確認して、 一覧の中からDriveListBoxを見つけ出してチェックをつけてから[OK]ボタンをクリックしてダイアログ画面を閉じてください。

これで、ツールボックスにDriveListBoxが追加されます。

■画像2:DriveListBoxのアイコン

あとは、ボタンやテキストボックスと同じ要領でフォームに貼り付けて使うだけです。とりあえず、フォームの適当なところにDriveListBoxを貼り付けて、そのままプログラムを実行してみてください。

何もプログラムしていませんが、ちゃんとドライブの一覧が表示されてどれか1つを選ぶことができますよね。

これだけでは寂しいのでちょっとだけプログラムしてみましょう。フォームにボタンを貼り付けて次の通り記述して下さい。

VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    MsgBox(DriveListBox1.Drive)

End Sub

■リスト1

ボタンをクリックするとそのとき選択されているドライブが表示されます。

いかがでしょうか?非標準コントロールがとても簡単で便利に使えることがわかっていただけたでしょうか?

こうなると、他にどんな非標準コントロールがあってどんな便利なことができるのか知りたくなってきます。今回は非標準コントロールを1つずつ紹介していく趣旨ではないのでここでは初めから用意されている主な非標準コントロールをざっと表にまとめるにとどめておきます。

コントロール 読み方 説明
ADODC エイディーオウディーシー ADOを使ったデータソースへの連結を行います。
ButtonArray ボタンアレイ ButtonをVB6のコントロール配列のように扱う機能を提供します。
DirListBox ディレクトリリストボックス フォルダの一覧
DriveListBox ドライブリストボックス ドライブの一覧
FileListBox ファイルリストボックス ファイルの一覧
PropertyGrid プロパティグリッド プロパティ一覧

■表2:主な非標準の.NET Framework コンポーネント

ADODCButtonArrayはおそらく使う機会はないと思いますがVB6を使っていた方にはなじみのものと思いますのでここに挙げておきました。ButtonArrayの他にもTextArrayなお各コントロールに対応した...Arrayという非標準コントロールが用意されており、VB6のコントロール配列のような機能をサポートしますが使いにくいので使わない方がいいです。VB6のプログラムを.NETに自動アップグレードするとこれらのコントロールを見る機会があります。そうでない場合はまず使いません。

 

3.簡易ファイルエクスプローラ

 

DirListBoxFileListBoxとさきほど紹介したDriveListBoxはプログラムでうまく連携させればちょっとしたファイルエクスプローラのようなものを簡単に作ることができます。ここでも簡単に紹介しておきましょう。

ただ単にファイルを選択できるだけではつまらないので[開く]ボタンをクリックするとそのファイルを実行できるようにします。たとえば、txtファイルを開いたり、mp3を演奏したりできます。

では、フォームに次のようにコントロールを配置してください。もちろんDriveListBoxDirListBoxFileListBoxを事前にツールボックスに追加する必要があります。

■画像3:簡易ファイルエクスプローラ

プログラムは次の通りです。

VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

'■ドライブリストボックス
Private
Sub DriveListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DriveListBox1.SelectedIndexChanged

    DirListBox1.Path = DriveListBox1.Drive
    Call DirListBox1_SelectedIndexChanged(sender, Nothing)

End Sub

'■ディレクトリリストボックス
Private Sub DirListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DirListBox1.SelectedIndexChanged

    FileListBox1.Path = DirListBox1.DirList(DirListBox1.DirListIndex)
    Call FileListBox1_SelectedIndexChanged(sender, Nothing)

End Sub

'■ファイルリストボックス
Private Sub FileListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FileListBox1.SelectedIndexChanged

    txtFileName.Text = FileListBox1.Path & "\" & FileListBox1.FileName

End Sub

'■[開く]ボタン
Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click

    Try
       
Process.Start(txtFileName.Text)
    Catch ex As Exception
        MsgBox(ex.Message)
    End
Try

End Sub

■リスト2:簡易ファイルエクスプローラ

これだけでファイルを選択して開くことができるアプリケーションが完成だと思うとあっけないものです。

ファイルを開くためにプログラムではProcessクラス(読み方:Process = プロセス)のStartメソッド(読み方:Start = スタート)を使っています。このStartメソッドはファイルは開いてくれるしexeは実行してくれるしとても便利です。

他にポイントとしては、ところどころプログラム内からイベントプロシージャを呼び出しているところくらいです。たとえば、ディレクトリリストボックスでフォルダを選択したらディレクトリリストボックスのSelectedIndexChangedイベント(読み方:SelectedIndexChanged = セレクテッドインデックスチェンジド)が発生するのですが、ここからさらに自分でファイルリストボックスのSelectedIndexChangedイベントを呼び出しています。

イベントプロシージャといえともこのように普通のメソッドとして呼び出すこともできるのです。

 

4.COMコンポーネント

 

今度は.NETの世界を飛び出して、さらなる非標準コントロールを使ってみます。今まで紹介したDriveListBoxなどのコントロールは標準ではないとはいえ.NETに対応して.NETで作られたコントロールでしたが、.NETで作られていないコントロールでもCOM(読み方:COM = コム)という規格に準拠したコントロールなら同じようにフォームに貼り付けて使用することができます。

この、COM準拠のコントロールのことをActiveXコントロール(読み方:ActiveX = アクティブエックス)とも呼びます。

.NETのコントロールとCOMコンポーネント(COM規格で作られているコントロール)は使う側から見ればまったく同じように使うことができますが、規格が違うため内部では異なる扱いがされています。とはいえ、単純に使うだけならこの内部での違いはほとんど気にする必要がありません。

ただし、あなたのパソコンで作ったプログラムにCOMコンポーネントを使用している場合、そのプログラムを友達のパソコンで動かすことができない可能性もあります。というのは、COMコンポーネントは.NETに付属しているわけではないので環境によってインストールされていたりされていなかったりするからです。たとえば、VB6がインストールされている環境ではMicrosoft Flex Grid ControlというCOMコンポーネントが使用できますが、その他の環境ではこのCOMコンポーネントは使用できない可能性があります。

あなたの作ったプログラムと一緒にCOMコンポーネントを友達のパソコンにインストールすれば問題は解決しますが、COMコンポーネントのインストールに関しては著作権の問題も含めていくつかのハードルがあるのでできればCOMコンポーネントなしで済ませたいものです。(もちろん.NETのコントロールにも著作権の問題はあります。)

さて、ここでは試しにToggleButton(読み方:ToggleButton = トグルボタン)というCOMコンポーネントを使用してみます。

デザイン画面にしてから、[ツール]メニューの[ツールボックス アイテムの追加と削除...]をクリックして、さきほどの一覧を表示してください。そして、今度は「COM コンポーネント」のタブをクリックします。結構時間がかかるのですがやがてCOMコンポーネントの一覧が表示されます。この一覧に並んでいるコントロールのすべてが使用可能というわけではありませんのでご注意ください。

■画像4:COM コンポーネントの一覧

今回は一覧の中からMicrosoft Forms 2.0 ToggleButtonをチェックして[OK]ボタンを押してください。もし、一覧の中にMicrosoft Forms 2.0 ToggleButtonがない場合はあなたの環境ではToggleButtonが使えないと言うことですのでその場合は、ここの説明を読み流してください。多分、OfficeがインストールされていればToggleButtonもインストールされていると思うのですが、私にもよくわかりません。

さて、以上の手順でツールボックスにトグルボタンが追加されます。

■画像5:ToggleButtonのアイコン

では、フォームに貼り付けて少し遊んで見ましょう。フォームに貼り付けると見かけはボタンに似ていますが文字が何も表示されていないのがわかります。少し寂しいので「トグルボタン」と表示することにします。プロパティウィンドウからCaptionプロパティ(読み方:Caption = キャプション)に「トグルボタン」を入力してください。

これだけで実行してみましょう。実行してトグルボタンを何度もクリックするとわかりますがこのトグルボタンは普通のボタンと違って押すとへこみっぱなしになるのです。もう一度押すと普通の状態に戻ります。いわばチェックボックスと同じ機能で見かけが違うだけと言っても良いでしょう。

  

■画像6、7:実行時のトグルボタンの状態

それでは、今度はトグルボタンがクリックしたときにトグルボタンの状態を判断するプログラムを書いてみます。フォームにラベルを1つ追加して、トグルボタンのClickEventイベント(読み方:ClickEvent = クリックイベント)に次の通り記述してください。

VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

Private Sub AxToggleButton1_ClickEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles AxToggleButton1.ClickEvent

    If CBool(AxToggleButton1.get_Value) Then
       
Label1.Text = "トグルボタンは ON です。"
   
Else
       
Label1.Text = "トグルボタンは OFF です。"
    End
If

End Sub

■リスト3:トグルボタンの状態判定

今度は実行するとトグルボタンをクリックしたときの状態がラベルに表示されるようになります。

これだけの手順でCOMコンポーネントといっても基本的な扱いは.NETのコントロールと変わらないと言うことがわかっていただけたでしょう。また、扱い方が同じだと言っても文字を表すプロパティがCaptionであったり、クリックしたときに発生するイベントがClickEventであったりと.NETの常識が通用しないと言うこともわかっていただけたでしょう。

実際にはCOMコンポーネントをフォームに貼り付けて使うことなどまずないとは思いますが、いざとなったらこういう手もあるということを知っていると応用力が広がります。

 

5.便利なコントロールの入手方法

 

以上の説明でコントロールは自由に追加できることがわかりました。あなたが必要としている機能がVBに標準で備わっていなくても標準でないコントロールを使用することにより問題が解決できる可能性があるということです。

でも、この「標準でないコントロール」は一体どこにあるのでしょうか?

はじめの手順でしめしたようにVBにあらかじめ用意されているDriveListBoxなどはわかりましたが、他のコントロールを探すためのどのような方法があるでしょうか?

コントロールを入手する代表的な方法をまとめてみました。

入手方法 説明
お店で買う お店でも売っています。グレープシティ社などコントロールを専門的に扱っているメーカーもあります。一般的に質の高いコントロールが多いのですが独自仕様にかたよりがちな場合があって、VB標準のコントロールに比べて使いにくい印象をうけるかもしれません。
インターネットでダウンロードする フリーウェア・シェアウェア含めていろいろなコントロールがダウンロードできますが玉石混淆です。
自分で作る Professionalエディション以上のVBを持っている場合は自分でコントロールを作れます。もちろんVBを使って作ることができます。
その他 雑誌の付録CDやプログラマのイベントで配布されているCDなどに収録されている場合があります。

■表3:コントロールの入手方法

すぐにためせるのはなんと言っても「インターネットでダウンロードする」ですね。ただ、検索が難しいです…。Vector等のダウンロードサイトを漁ってみるのも良いようです。

ここでは、皆さんに新しいコントロールを簡単に取り込めることを実感していただくために私が作ったコントロールを使用します。

以下のリンクをクリックしてファイルをダウンロードしてください。

 DNS24_Shape.lzh 5.11KB

 

ダウンロードしたら解凍します。Shape.dllというファイルが出てきますのでどこでも良いので適切なところにコピーしてください。このShape.dllが私が作ったコントロールの本体です。

これをプログラムに取り込む前にどのような機能を持ったコントロールのなのか紹介しておきます。

このコントロールは Shape (読み方:Shape = シェイプ) という名前で、アプリケーションに図形を使った装飾を追加します。具体的にはフォームに簡単に線、円、四角、クロスを貼り付けることができるうえに線の色、塗りつぶしの色、グラデーションなどはプロパティを使って簡単に指定できます。

■画像8:Shapeの使用例

この画像では文字の部分はラベルです。Shapeはあくまで図形を表現できるだけです。各画像ではShapeのプロパティがどのようになっているかもまとめておきます。何しろ私が作ったコントロールなのでヘルプもないですからここで情報を公開しないと使い方がわからないはずなのです。

コントロール プロパティ 説明
Shape1 BorderWidth 5 線の幅を 5 にする。
Shape Line 図形の形を 線 にする。
Shape2 BorderColor Red 線の色を 赤 にする。
BorderWidth 5 線の幅を 5 にする。
Shape Oval 図形の形を 楕円形 にする。
Shape3 BorderColor Blue 線の色を 青 にする。
BorderWidth 5 線の幅を 5 にする。
Shape Rectangle 図形の形を 長方形 にする。
Shape4 BorderWidth 5 線の幅を 5 にする。
BorderStyle Dot 線の種類を 点線 にする。
LineDirection NE_SW 線の傾き方向を 右上から左下 にする。
Shape Line 図形の形を 線 にする。
Shape5 BorderColor 0, 192, 0 線の色を 緑 にする。
BorderWidth 5 線の幅を 5 にする。
Shape Cross 図形の形を ×型 にする。
Shape6 BorderStyle None 線を描画しない。
FillColor1 255, 128, 128 塗りつぶしの色を 薄い赤 にする。
FillStyle Solid 単色で塗りつぶす。
Shape Oval 図形の形を 楕円形 にする。
Shape7 BorderStyle None 線を描画しない。
FillColor1 192, 192, 255 塗りつぶしの色を 薄い青 にする。
FillStyle Solid 単色で塗りつぶす。
Shape Rectangle 図形の形を 長方形 にする。
Shape8 BorderColor Red 線の色を 赤 にする。
BorderWidth 5 線の幅を 5 にする。
BorderStyle Dot 線の種類を 点線 にする。
Shape Oval 図形の形を 楕円形 にする。
Shape9 BorderColor 192, 192, 0 線の色を カーキ色 にする。
BorderWidth 5 線の幅を 5 にする。
Shape Plus 図形の形を 十字 にする。
Shape10 BorderStyle None 線を描画しない。
FillColor1 255, 224, 192 グラデーション開始色を 薄い茶色 にする。
FillColor2 64, 0, 0 グラデーション終了色を 濃い茶色 にする。
FillStyle Gradient グラデーションで塗りつぶす。
Shape Oval 図形の形を 楕円形 にする。
Shape11 BorderStyle None 線を描画しない。
FillColor1 White グラデーション開始色を 白 にする。
FillColor2 Navy グラデーション終了色を 濃い青 にする。
FillStyle Gradient グラデーションで塗りつぶす。
GradientDirection N_S グラデーションの傾き方向を 上から下 にする。
Shape Rectangle 図形の形を 長方形 にする。
Shape12 BoderColor Blue 線の色を 青 にする。
BorderStyle DashDot 線の種類を -・-・ にする。
BorderWidth 5 線の幅を 5 にする。
Shape Rectangle 図形の形を 長方形 にする。

■表4:Shapeの使用例とプロパティの組み合わせ

考えてみるとフォームに単に線を引きたい場合や、円が必要な場合などに既存のコントロールでは対応できないのですよね。円を描いてくれるコントロールがあればプロパティの設定だけで簡単にできるので便利です。それがこのShapeです。ネタばらしをしてしまうとVB6のときには、やはりShapeという名前でこのような機能を持ったコントロールがあったのですが、.NETになってからはShapeコントロールがなくなってしまったので、VB6のShapeを.NETに移植しただけです。

前置きが長くなってしまいました。そろそろあなたのプログラムにこのShapeを追加しましょう。

今までと同じ手順で[ツールボックス アイテムの追加と削除...]をクリックして.NETコンポーネントの一覧を表示させてください。今度は[参照]ボタンを押して、先ほどダウンロードしてきたShape.dllの場所を指定してください。

そうすると、一覧にShapeが追加されますので、Shapeがチェックされていることを確認してから[OK]ボタンをクリックしてください。

■画像9

以上でツールボックスにShapeが追加されます。

■画像10:Shapeのアイコン

あとは通常のコントロールと同じようにフォームに貼り付けて上記の表のようにプロパティをいろいろ変更して遊んでみてください。

■画像11:Shapeの使用例

こんな風にフォームの背景に使うこともできます。(この画像ではグラデーションが汚く見えますが本物は綺麗です。)

いかがでしたでしょうか?コントロールを入手してしまえばあなたのプログラムに追加するのはとても簡単だと言うことがわかっていただけたでしょうか?

 

博士のワンポイントレッスン
V太:博士〜。僕も自分でコントロール作ってみたいです。どうやって作るんですか?
博士: ほほぅ。関心じゃのう。自分でコントロールを作るにはVBで新しいプロジェクトを作るときに「クラスライブラリ」か「Windows コントロール ライブラリ」を選ぶのじゃ。
あ、いつも「Windows アプリケーション」を選んでいる画面ですね。ふーん。いろいろあるんですね。
ただし、VBのStandard Editionではコントロールは作成できないのじゃよ。
えー!!!!

…Standard Editionって何?

まぁ一番安いVBのことじゃな。同じバージョンのVBでも「エディション」というランクがあるのじゃよ。Standard版は安い代わりに機能が限定されておるのじゃ。

新しいプロジェクト作成画面に「Windows コントロール ライブラリ」が表示されていなかったらそのVBはStandard版ということじゃな。

B子:Visual Studioの機能では作れなくても.NET Frameworkの機能で作ることはできるわ。メモ帳とかでプログラムを書いて自分でビルドするの。
まぁどっちにしてもそれなりの知識が必要と言うことじゃ。V太君にはまだちょっときついかもしれんが、Professional版を持っているなら四苦八苦しながら試してみるのも良い勉強になるじゃろう。

 

参考 Shapeコントロールの権利について

ここで使用しているShapeコントロールの著作権は私に帰属しますが、みなさんは営利・非営利を問わず自由にこのコントロールを使用・配布して構いません。ただし、コントロール単体での営利目的の配布はしないでください。

また、Shapeコントロールでは一部のプロパティの動作が実装されていない・テストが十分でないなど完全に完成されたものではありません。上記の権利はこの不完全な状態での権利です。

私は将来Shapeコントロールを完成させて売り出す可能性がありますが、それでもここでダウンロードできる不完全版のShapeコントロールに関するみなさんの権利は失効しません。