Visual Basic 初級講座 |
Visual Basic 中学校 > 初級講座 >
第24回 標準でないコントロール
標準では使用できないコントロールも自分で自由に追加して使用することができます。あらかじめ用意されているコントロールもありますし、店で買ったり、インターネットでダウンロードしてきたりするものもあります。今回はこのような標準ではないコントロールの紹介と、あなたのプログラムへの取り込み方を説明します。
この回の要約 ・ドライブの一覧を表示・選択するDriveListBoxコントロールは、VBがインストールされているばすぐに使用できる非標準コントロール。 ・Process.Startを使うとexeを実行したり、テキストやmp3を開くことができる。 ・COMコンポーネントである ToggleButton を使うと、押すとへこみっぱなしになるボタンをフォームに追加できる。 ・私が作ったShapeコントロールをダウンロードしてフォームに貼り付けることができる。 ・私が作ったShapeコントロールは線・円・四角などの図形をプロパティだけで簡単に描画し、グラデーション等の色指定もできる。 |
「標準コントロール」という言葉はとても曖昧(あいまい)に使われています。実際マイクロソフトがあるコントロールを標準であるとか標準でないとか決めているわけではないので無理もありません。
Visual Basic 中学校でははじめからツールボックスに並んでいてすぐにでも使用可能になっているコントロールを「標準コントロール」と呼んでいます。これは多くの人の言葉遣いと一致するものと思います。
となると「標準でないコントロール」とは、はじめはツールボックスに並んでいないが後から追加して使用することができるコントロールということになります。
VBにははじめからこの「標準でないコントロール」がいくつか用意されていますし、マイクロソフト以外の会社が作ったコントロールを取り込んで使用したり、自分でコントロールを作ることもできます。
このようにコントロールは自由に増やすことができるためVB(やVC#やVCなど)は非常に拡張性に富んでいます。
標準でないコントロールには大きく分けて次の2種類があります。
.NET Framework コンポーネント | 「標準でない」というだけで普通のコントロールと同じです。ボタンやラベルなどの使い方がわかっていればこれらのコントロールも同じような手法で使うことができます。 |
COM コンポーネント | ActiveXコントロール(読み方:ActiveX = アクティブエックス)とも呼ばれます。通常のコントロールとは根本的に違う仕組みなのですが、プログラムする上では違いを意識しなくてもすみます。しかし、.NETの常識が通用しない場合もあります。 |
■表1:標準でないコントロール
今回は「コントロール」の詳しい性質について扱うのではなく、いかにして標準でないコントロールをツールボックスに追加し、フォームに配置し、プログラムで使用するのかを概略的に説明します。
それでは、手始めに初めからVBに付属していて、使い方も簡単な非標準コントロール「ドライブリストボックス」を実際にプログラムで使用する手順を説明します。
ドライブリストボックスはコンボボックスのようなコントロールで、コンピュータのドライブを選択するためのコントロールです。
まず、新しいプロジェクトを作成してデザイン画面にしてから、[ツール]メニューの[ツールボックス アイテムの追加と削除...]をクリックします。
そうすると少し時間がかかりますがコントロールの一覧が表示されます。一覧にやけにたくさんのコントロールが並んでいて驚かれる方もいるでしょう。残念ながらこの一覧に並んでいるコントロールのすべてが使用可能というわけではありません。また、この一覧の内容はパソコンの環境により異なります。
■画像1:.NET Frameworkコンポーネントの一覧
このダイアログ画面のタブで「.NET Framework コンポーネント」が選択されているのを確認して、 一覧の中からDriveListBoxを見つけ出してチェックをつけてから[OK]ボタンをクリックしてダイアログ画面を閉じてください。
これで、ツールボックスにDriveListBoxが追加されます。
■画像2:DriveListBoxのアイコン
あとは、ボタンやテキストボックスと同じ要領でフォームに貼り付けて使うだけです。とりあえず、フォームの適当なところにDriveListBoxを貼り付けて、そのままプログラムを実行してみてください。
何もプログラムしていませんが、ちゃんとドライブの一覧が表示されてどれか1つを選ぶことができますよね。
これだけでは寂しいのでちょっとだけプログラムしてみましょう。フォームにボタンを貼り付けて次の通り記述して下さい。
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 コンポーネント
ADODCやButtonArrayはおそらく使う機会はないと思いますがVB6を使っていた方にはなじみのものと思いますのでここに挙げておきました。ButtonArrayの他にもTextArrayなお各コントロールに対応した...Arrayという非標準コントロールが用意されており、VB6のコントロール配列のような機能をサポートしますが使いにくいので使わない方がいいです。VB6のプログラムを.NETに自動アップグレードするとこれらのコントロールを見る機会があります。そうでない場合はまず使いません。
DirListBoxとFileListBoxとさきほど紹介したDriveListBoxはプログラムでうまく連携させればちょっとしたファイルエクスプローラのようなものを簡単に作ることができます。ここでも簡単に紹介しておきましょう。
ただ単にファイルを選択できるだけではつまらないので[開く]ボタンをクリックするとそのファイルを実行できるようにします。たとえば、txtファイルを開いたり、mp3を演奏したりできます。
では、フォームに次のようにコントロールを配置してください。もちろんDriveListBoxとDirListBoxとFileListBoxを事前にツールボックスに追加する必要があります。
■画像3:簡易ファイルエクスプローラ
プログラムは次の通りです。
'■ドライブリストボックス Private Sub DriveListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DriveListBox1.SelectedIndexChanged DirListBox1.Path = DriveListBox1.Drive 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) 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 |
■リスト2:簡易ファイルエクスプローラ
これだけでファイルを選択して開くことができるアプリケーションが完成だと思うとあっけないものです。
ファイルを開くためにプログラムではProcessクラス(読み方:Process = プロセス)のStartメソッド(読み方:Start = スタート)を使っています。このStartメソッドはファイルは開いてくれるしexeは実行してくれるしとても便利です。
他にポイントとしては、ところどころプログラム内からイベントプロシージャを呼び出しているところくらいです。たとえば、ディレクトリリストボックスでフォルダを選択したらディレクトリリストボックスのSelectedIndexChangedイベント(読み方:SelectedIndexChanged = セレクテッドインデックスチェンジド)が発生するのですが、ここからさらに自分でファイルリストボックスのSelectedIndexChangedイベントを呼び出しています。
イベントプロシージャといえともこのように普通のメソッドとして呼び出すこともできるのです。
今度は.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 = クリックイベント)に次の通り記述してください。
Private
Sub AxToggleButton1_ClickEvent(ByVal
sender As Object,
ByVal e As
System.EventArgs) Handles
AxToggleButton1.ClickEvent
If
CBool(AxToggleButton1.get_Value)
Then |
■リスト3:トグルボタンの状態判定
今度は実行するとトグルボタンをクリックしたときの状態がラベルに表示されるようになります。
これだけの手順でCOMコンポーネントといっても基本的な扱いは.NETのコントロールと変わらないと言うことがわかっていただけたでしょう。また、扱い方が同じだと言っても文字を表すプロパティがCaptionであったり、クリックしたときに発生するイベントがClickEventであったりと.NETの常識が通用しないと言うこともわかっていただけたでしょう。
実際にはCOMコンポーネントをフォームに貼り付けて使うことなどまずないとは思いますが、いざとなったらこういう手もあるということを知っていると応用力が広がります。
以上の説明でコントロールは自由に追加できることがわかりました。あなたが必要としている機能が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の使用例
こんな風にフォームの背景に使うこともできます。(この画像ではグラデーションが汚く見えますが本物は綺麗です。)
いかがでしたでしょうか?コントロールを入手してしまえばあなたのプログラムに追加するのはとても簡単だと言うことがわかっていただけたでしょうか?
博士のワンポイントレッスン
|
参考 Shapeコントロールの権利について ここで使用しているShapeコントロールの著作権は私に帰属しますが、みなさんは営利・非営利を問わず自由にこのコントロールを使用・配布して構いません。ただし、コントロール単体での営利目的の配布はしないでください。 また、Shapeコントロールでは一部のプロパティの動作が実装されていない・テストが十分でないなど完全に完成されたものではありません。上記の権利はこの不完全な状態での権利です。 私は将来Shapeコントロールを完成させて売り出す可能性がありますが、それでもここでダウンロードできる不完全版のShapeコントロールに関するみなさんの権利は失効しません。 |