コーディングを始める前に
Visual Basic でアプリケーションを作成する際の最も重要な (そして見落とされがちな) 部分は、設計フェーズです。アプリケーションのユーザー インターフェイスを設計する必要性は明らかですが、コードを構造化する必要性はそれほど明らかではありません。アプリケーションの構築方法が異なると、アプリケーションのパフォーマンス、コードの保守性、使いやすさに違いが生じる可能性があります。 Visual Basic アプリケーション コードは階層的に編成されています。一般的なアプリケーションは、アプリケーション内の各フォームのフォーム モジュール、コードを共有するオプションの標準モジュール、およびオプションのクラス モジュールという複数のモジュールで構成されます。各モジュールには、イベント プロセス、サブ サブプロセスまたは関数プロセス、PRperty プロセスなどのコードを含むいくつかのプロセスが含まれています。 どのプロセスがどのモジュールに属するかの決定は、作成されるアプリケーションのタイプと特定の関係があります。 Visual Basic はオブジェクトベースであるため、アプリケーションを、それが表すオブジェクトの観点から考えると役立ちます。この章では、ビデオ カセット レコーダーとテレビで構成されるオブジェクトに基づいてサンプル アプリケーション Vcr.vbp を設計します。 VCR アプリケーションには、標準モジュールと 2 つのクラス モジュールの 2 つのフォーム モジュールが含まれています。 「オブジェクト ブラウザ」を使用して、プロジェクトの構造を調べることができます (図 5.2)。
VCR アプリケーション (frmVCR) の主な形式は、VCR と TV 画面を組み合わせた視覚イメージです (図 5.3)。これは、現実世界のシーンをモデルにしたいくつかのオブジェクトで構成されています。一連のコマンド ボタン (cmdPlay、cmdRecord など) は、VCR を操作するボタンを模倣しています。ソフトウェア VCR には、クロック (lblTime)、チャンネル インジケーター (lblChannel)、機能インジケーター (shpPlay、shpRecord など)、およびピクチャー チューブ (picTV) も含まれています。 Vcr.frm フォーム モジュールには、これらすべてのオブジェクトのイベント プロシージャが含まれています。
多くの場合、複数のオブジェクトによって共有される繰り返しプロセスが存在します。たとえば、「再生」、「巻き戻し」、または「録音」ボタンを「押す」には、「一時停止」ボタンと「停止」ボタンが有効である必要があります。各ボタンの Click イベント プロシージャでこのコードを繰り返すよりも、すべてのボタンが呼び出すことができる共有サブルーチンを作成することをお勧めします。これらのサブルーチンが将来変更された場合、1 か所で変更するだけですべての変更を行うことができます。標準モジュール Vcr.bas には、さまざまな共有プロシージャが含まれています。
VCR の一部の部分 (テープ転送メカニズムやテレビ番組録画の背後にあるロジックなど) は目に見えません。同様に、ソフトウェア VCR の一部の機能には視覚的なイメージがありません。これらの部分と関数は、Recorder.cls と Tape.cls という 2 つのクラス モジュールとして実装されます。 clsRecorder モジュールには「録音」プロセスを開始するコードが含まれており、clsTape モジュールには「テープ」の方向と速度を制御するコードが含まれています。これらのモジュールで定義されたクラスは、フォーム内のどのオブジェクトにも直接関係しません。これらは独立したコード モジュールであるため、録画プログラムを変更せずに簡単に再構築できます。
コード構造の設計に加えて、命名規則を確立することも重要です。既定では、Visual Basic はプロジェクトの最初のフォームに Form1、2 番目のフォームに Form2 という名前を付けます。アプリケーションに複数のフォームがある場合は、コードを作成または編集する際の混乱を避けるために、それらに意味のある名前を付けることをお勧めします。 Visual Basic で推奨されている命名規則の一部は、付録 B「VisualBasic のコーディング規則」にリストされています。
オブジェクトについてさらに学び、コードの書き方を学ぶ際には、VCR サンプル アプリケーションを参照して、さまざまなコーディング手法の例を見つけてください。
コード記述メカニズム
コードを書き始める前に、Visual Basic でコードを記述する仕組みを理解することが重要です。他のプログラミング言語と同様、Visual Basic にはコードの編成、編集、書式設定に関する独自のルールがあります。
コードモジュール
Visual Basic コードはモジュールに格納されます。モジュールには、フォーム、標準、クラスの 3 種類があります。単純なアプリケーションではフォームを 1 つだけ持つことができ、アプリケーションのコードはすべてフォーム モジュール内に存在します。アプリケーションが大規模で複雑な場合は、追加のフォームを追加する必要があります。最終的に、共通のコードが複数の形式で実行されていることが判明する場合があります。両方の形式でコードを複製したくないため、共通のコードを実装するための手順を含む別のモジュールを作成します。スタンドアロンモジュールは標準モジュールとなります。その後、共有プロシージャを含むモジュールのライブラリを構築できます。
各標準モジュール、クラス モジュール、フォーム モジュールには以下を含めることができます。
声明。定数、型、変数、およびダイナミック リンク ライブラリ (DLL) プロシージャの宣言を、フォーム、クラス、または標準モジュールのモジュール レベルで配置できます。
プロセス。 Sub、Function、または Property プロシージャには、ユニットとして実行できるコードが含まれています。これらについては、この章の後半の「プロセスの概要」セクションで説明します。
フォームモジュール
フォーム モジュール (ファイル拡張子 .FRM) は、ほとんどの Visual Basic アプリケーションの基礎です。フォーム モジュールには、イベントを処理するためのプロシージャ、一般的なプロシージャ、変数、定数、型、外部プロシージャのフォーム レベルの宣言を含めることができます。テキスト エディターでフォーム モジュールを表示すると、フォームとそのコントロールのプロパティ設定を含む説明も表示されます。フォーム モジュールに書き込まれるコードは、フォームが属する特定のアプリケーションに固有であり、アプリケーション内の他のフォームやオブジェクトを参照することもあります。
標準モジュール
標準モジュール (ファイル拡張子 .BAS) は、アプリケーション内の他のモジュールからアクセスされるプロシージャと宣言のコンテナです。これらには、変数、定数、型、外部プロシージャ、およびグローバル プロシージャのグローバル (アプリケーション全体) またはモジュール レベルの宣言を含めることができます。標準モジュールで記述されたコードは、特定のアプリケーションに結び付ける必要はありません。フォームやコントロールを名前で参照しないように注意すれば、標準モジュールをさまざまなアプリケーションで再利用できます。
クラスモジュール
Visual Basic では、クラス モジュール (ファイル拡張子 .CLS) がオブジェクト指向プログラミングの基礎です。クラス モジュールにコードを記述して、新しいオブジェクトを作成できます。これらの新しいオブジェクトには、カスタム プロパティとメソッドを含めることができます。実際、フォームは、コントロールを配置したりフォーム ウィンドウを表示したりできる、まさにそのようなクラス モジュールです。
詳細クラス モジュールでのコードの記述の詳細については、第 9 章「オブジェクトを使用したプログラミング」を参照してください。
Visual Basic の Professional および Enterprise エディションには、ActiveX ドキュメント、ActiveX デザイナー、およびユーザー コントロールも含まれていることに注意してください。異なるファイル拡張子を持つ新しいモジュール タイプが導入されています。コーディングの観点から、これらのモジュールはフォーム モジュールとして扱う必要があります。
コードエディタを使用する
Visual Basic コード エディターは、ほとんどのコードが記述されるウィンドウです。これは、Visual Basic コードの記述を容易にする多くの機能を備えた、高度に特殊化されたワードプロセッサ ソフトウェアのようなものです。図 5.4 に「コードエディタ」ウィンドウを示します。
モジュール内のVisual Basicコードを操作する必要があるため、「プロジェクトエクスプローラー」で選択したモジュールごとに独立した「コードエディター」ウィンドウを開く必要があります。各モジュールでは、モジュールに含まれるオブジェクトごとに、モジュール内のコードがオブジェクトに対応する独立した部分に再分割されます。パーツの切り替えには「オブジェクトリストボックス」を使用します。フォーム モジュールのリストには、一般セクション、フォーム自体のセクション、およびフォームに含まれる各コントロールのセクションが含まれます。クラス モジュールの場合、リストには一般セクションとクラス セクションが含まれますが、標準モジュールの場合は、一般セクションが 1 つだけ表示されます。
各コードには、プロシージャ リスト ボックスを使用してアクセスする複数の異なるプロシージャを含めることができます。フォーム モジュールのプロシージャ リストには、フォームまたはコントロールのイベント プロシージャごとに個別のセクションが含まれています。たとえば、Label コントロールのプロセス リストには、Change イベント セグメント、Click イベント セグメント、DblClick イベント セグメントなどが含まれます。クラス モジュールは、クラス自体のイベント プロシージャ (初期化と終了) のみを列挙します。標準モジュールはイベントをサポートしていないため、標準モジュールはイベント プロシージャを列挙しません。
モジュールの一般セクションのプロシージャ リストには、モジュール レベルの変数、定数、および DLL 宣言が配置される唯一のセクション、つまり宣言セクションのみが含まれます。サブプロシージャまたは関数プロシージャをモジュールに追加すると、それらのプロシージャは宣言セクションの下のプロシージャ リスト ボックスに追加されます。
コード エディター ウィンドウでは、コードの 2 つの異なるビューを使用できます。一度に 1 つのプロセスを表示することも、モジュール内のすべてのプロセスを行で区切って表示することもできます (図 5.4 を参照)。 2 つのビューを切り替えるには、エディタ ウィンドウの左下隅にある [ビューの選択] ボタンを使用します。
オートコンプリートコーディング
Visual Basic ではステートメント、プロパティ、パラメーターを自動的に入力できるため、コードの記述がより便利になります。コードを入力すると、エディターは適切な選択肢、ステートメント、または関数のプロトタイプや値を列挙します。 [ツール] メニューの [オプション] コマンドからアクセスすると、[オプション] ダイアログ ボックスの [エディター] タブで、個々のコードの設定値を許可するか無効にするかを決定するオプションが利用可能になります。
コードにコントロール名を入力すると、「自動リスト メンバー プロパティ」によってコントロールのドロップダウン プロパティ シートが強調表示されます (図 5.5)。属性名の最初の数文字を入力するとテーブルから名前が選択され、Tab キーを押すと入力が完了します。このオプションは、特定のコントロールにどのようなプロパティがあるかわからない場合に非常に役立ちます。自動リストメンバー機能を無効にすることを選択した場合でも、CTRL J キーの組み合わせを使用してこの機能を利用できます。
「自動クイック情報」機能は、ステートメントと関数の構文を表示します (図 5.6)。有効な Visual Basic ステートメントまたは関数名を入力すると、構文が現在の行のすぐ下に表示され、その最初のパラメーターが太字で表示されます。最初のパラメータ値を入力すると、2 番目のパラメータが再び太字で表示されます。 「自動クイック情報」は、CTRL I キーの組み合わせを使用して取得することもできます。
ブックマーク
コード エディターでブックマークを使用すると、コードの特定の行にマークを付けて、後で簡単に戻れるようにすることができます。ブックマークのオンとオフを切り替えたり、既存のブックマークに移動するコマンドは、[編集]、[ブックマーク] メニュー項目、または [編集] ツールバーから取得できます。
詳細キーの組み合わせを使用してコード エディター ウィンドウのさまざまな機能を使用する方法の詳細については、「コード ウィンドウのショートカット キー」を参照してください。
コーディングの基本
このセクションでは、コード行の分割と結合の方法、コメントの追加方法、数値の使用方法、Visual Basic の命名規則など、コードを記述する仕組みを紹介します。
単一行のステートメントを複数行に分割する
コード ウィンドウで行継続文字 (スペースとそれに続くアンダースコア) を使用して、長いステートメントを複数の行に分割できます。行継続文字を使用することで、コードはコンピュータでも印刷物でも読みやすくなります。次の例では、行継続文字 (_) を使用してコードを複数の行に分割しています。
Data1.RecordSource=_
SELECT*FROMタイトル、発行者_
&WHEREPublishers.PubId=Titles.PubID_
&ANDPublishers.State='CA'
同じ行内で、行継続文字の後にコメントを追加することはできません。行継続文字を使用できる場所にはいくつかの制限があります。
複数のステートメントを同じ行に結合する
通常、ステートメント終了記号のない 1 行に Visual Basic ステートメントが 1 つありますが、コロン (:) で区切ることにより、2 つ以上のステートメントを同じ行に置くことができます。
Text1.Text=Hello:Red=255:Text1.BackColor=
赤
ただし、コードを読みやすくするために、1 行に 1 つのステートメントを入れることをお勧めします。
詳細については、付録 A「Visual Basic の仕様、制限事項、およびファイル形式」を参照してください。
コードにコメントを追加する
このマニュアルの例を読んでいると、コメント文字 (') が頻繁に登場します。このシンボルは、Visual Basic にシンボルの後に続くものを無視するように指示します。これらは、開発者の便宜のためと、後でソース コードを調べる可能性のある他のプログラマの便宜のための、コード スニペット内のコメントです。例えば:
「これは画面の左側からです」
' コメントを開始します。
Text1.Text=こんにちは! 'テキスト ボックスに入力してください。
'いらっしゃいませ。
コメントはステートメントと同じ行に記述したり、ステートメントの後に記述したり、行全体を占めることもできます。上記のコードは両方の状況を示しています。同じ行の行継続文字の後にコメントを続けることはできないことに注意してください。
注: 2 行以上のコード行を選択し、[編集] ツールバーの [コメント ブロック] ボタンまたは [コメント ブロックの削除] ボタンを選択すると、コード ブロックにコメント記号を追加または削除できます。
数体系を理解する
このドキュメント内のほとんどの値は 10 進数 (基数 10) です。ただし、16 進数 (基数 16) または 8 進数 (基数 8) を使用した方が便利な場合があります。 Visual Basic では、接頭辞 &H を使用して 16 進数を表し、&O を使用して 8 進数を表します。次の表は、同じ数値の 10 進数、8 進数、および 16 進数の表現を示しています。
コンピュータはどちらの方式でも数値を扱うことができるため、通常は 16 進数または 8 進数の数体系を知る必要はありません。ただし、画面やコントロールの色の設定に 16 進数を使用するなど、特定のタスクには、一部の数値体系が他の数値体系よりも適しています。
VisualBasic の命名規則
Visual Basic コードを記述するときは、多くの要素 (Sub および Function プロシージャ、変数、定数など) を宣言し、名前を付けます。 Visual Basic コードで宣言されるプロシージャ、変数、および定数の名前は、次の規則に従う必要があります。
1. 文字で始めなければなりません。
2. ピリオドや型宣言文字(データ型を指定する特殊文字)を埋め込むことはできません。
3. 255 文字を超えることはできません。コントロール、フォーム、クラス、モジュールの名前は 40 文字を超えることはできません。
4. 制限されたキーワードと同じ名前を付けることはできません。
制限されたキーワードは、Visual Basic で使用される単語であり、言語の一部です。これらには、事前定義されたステートメント (If や Loop など)、関数 (Len や Abs など)、演算子 (Or や Mod など) が含まれます。
詳細情報キーワードテーブルの詳細については、『Visual Basic 6.0 言語リファレンスマニュアル』を参照してください。
フォームとコントロールには、制限されたキーワードと同じ名前を付けることができます。たとえば、コントロールに「ループ」という名前を付けることができます。ただし、Visual Basic はループがキーワードを意味すると認識するため、コード内で通常の方法でコントロールを参照することはできません。たとえば、次のコードはエラーになります。
Loop.Visible=True 'エラー。
制限されたキーワードと同じ名前を持つフォームまたはコントロールを参照するには、それらを修飾するか角括弧 [] で囲む必要があります。たとえば、次のコードはエラーになりません。
MyForm.Loop.Visible=True 'フォーム名を使用
「それを認定してください。
[Loop].Visible=True '角括弧
「うまくいきました。
角括弧は、フォームやコントロールを参照するときにこの方法で使用できますが、変数またはプロシージャ名が制限されたキーワードと同じである場合、変数宣言またはプロシージャ定義中には使用できません。角かっこを使用すると、制限されたキーワードと競合する他のタイプ ライブラリによって提供される名前を Visual Basic に強制的に受け入れることもできます。
角かっこを入力するのは面倒なので、フォーム名またはコントロール名にはあまり制限のないキーワードを使用することが望ましいことに注意してください。ただし、新しいバージョンの Visual Basic で既存のフォームまたはコントロールと競合する新しいキーワードが定義されている場合は、新しいバージョンを使用するようにコードを更新するときにこの手法を使用できます。 _
->