フォームについてもう一度議論する
フォーム設計の原則に加えて、アプリケーションの開始位置と終了位置も考慮する必要があります。アプリケーションの起動時にどのように表示されるかを決定するには、いくつかのテクニックがあります。アプリケーションのアンインストール時に発生する処理の一部について理解しておくことも重要です。
起動フォームを設定する
デフォルトでは、アプリケーションの最初のフォームが起動フォームとして指定されます。このフォームは、アプリケーションの実行が開始されると表示されます (したがって、最初に実行されるコードは、フォームの Form_Initialize イベント内のコードです)。アプリケーション起動時に別のフォームを表示したい場合は、起動フォームを変更する必要があります。
起動フォームを変更するには、次の手順に従います。
1. 「プロジェクト」メニューから「プロジェクトのプロパティ」を選択します。
2.「一般」を選択します。
3. [スタートアップ オブジェクト] リスト ボックスで、新しいスタートアップ フォームとなるフォームを選択します。
4. [OK]を選択します。
スタートアップフォームなしで開始する
場合によっては、フォームをロードせずにアプリケーションを起動したい場合があります。たとえば、データ ファイルをロードするコードを実行し、データ ファイルの内容に基づいて、いくつかの異なるフォームのうちどれを表示するかを決定することができます。これを行うには、次の例に示すように、標準モジュールに Main という名前のサブプロセスを作成します。
サブメイン()
DimintStatusAsInteger
'関数プロシージャを呼び出してユーザーのステータスを確認します。
intStatus=GetUserStatus
'ステータスに基づいて起動フォームを表示します。
IfntStatus=1Then
frmMain.Show
それ以外
frmPassWord.Show
EndIf
このプロシージャはサブプロシージャである必要があり、フォーム モジュール内に含めることはできません。 SubMainプロセスをスタートアップオブジェクトとして設定するには、「プロジェクト」メニューから「プロジェクトのプロパティ」を選択し、「全般」を選択し、「スタートアップオブジェクト」ボックスから「SubMain」を選択します。
起動時にクイック表示を表示する
データベースから大量のデータをロードしたり、大きなビットマップをロードしたりするなど、起動時に長い実行プロセスがある場合は、起動時に簡単に表示することができます。クイック表示は、通常、アプリケーション名、著作権情報、単純なビットマップなどのコンテンツを表示するフォームです。 Visual Basic を起動したときに表示される画面はクイック表示です。
クイック表示を表示するには、SubMain プロセスを起動オブジェクトとして使用し、Show メソッドを使用してフォームを表示する必要があります。
PRivateSubMain()
'クイック表示を表示します。
frmSplash.Show
'ここに起動プロセスを追加します。
...
'メインフォームを表示し、クイック表示をアンロードします。
frmMain.Show
アンロードフロムスプラッシュ
EndSub
スタートアップ ルーチンの実行中にクイック表示がユーザーの注意を引き、アプリケーションが迅速に読み込まれているような錯覚を与える可能性があります。これらの起動ルーチンが完了すると、最初のフォームをロードし、すぐにアンロードして表示できます。
すぐに表示できるデザインの場合は、できるだけシンプルにしてください。多数のビットマップまたは多数のコントロールを使用すると、高速表示自体の読み込みが遅くなります。
アプリケーションを終了する
すべてのフォームが閉じられ、コードが実行されていない場合、イベント駆動型アプリケーションは実行を停止します。表示されている最後のフォームが閉じられたときにまだ非表示のフォームが存在する場合、(表示されているフォームがないため) アプリケーションは終了したように見えますが、実際には、すべての非表示のフォームが閉じるまでアプリケーションは実行され続けます。これは、アンロードされたフォームのプロパティまたはコントロールにアクセスすると、そのフォームが暗黙的かつサイレントにロードされるために発生します。
アプリケーションを閉じるときにこの種の問題を回避する最善の方法は、すべてのフォームが確実にアンロードされるようにすることです。複数のフォームがある場合は、Forms コレクションと Unload ステートメントを使用できます。たとえば、メイン フォームで cmdQuit という名前のコマンド ボタンを使用すると、プログラムを終了できます。アプリケーションにフォームが 1 つしかない場合、Click イベント プロシージャは単純に次のようになります。
PrivateSubcmdQuit_Click()
アンロードミー
EndSub
アプリケーションで複数のフォームを使用する場合、メイン フォームの Unload イベント プロシージャにコードを配置することで、これらのフォームをアンロードできます。 Forms コレクションを使用すると、すべてのフォームが検出されて閉じられたことを確認できます。次のコードは、フォーム コレクションを使用してすべてのフォームをアンロードします。
PrivateSubForm_Unload(CancelAsInteger)
ディミア整数
'フォーム コレクションをループし、各フォームをアンロードします。
Fori=Forms.Count-1to0Step-1
アンロードフォーム(i)
次
EndSub
状況によっては、既存のフォームやオブジェクトの状態に関係なく、アプリケーションを終了する必要があることがあります。この目的のために、Visual Basic には End ステートメントが用意されています。
End ステートメントにより、アプリケーションは直ちに終了します。End ステートメントの後のコードは実行されず、それ以上のイベントは発生しません。特に、Visual Basic はフォームの QueryUnload、Unload、または Terminate イベント プロシージャを実行しません。オブジェクトへの各参照は解放されますが、独自のクラスを定義した場合、Visual Basic はこれらのクラスによって作成されたオブジェクトの Terminate イベントを実行しません。
End ステートメントに加えて、Stop ステートメントでもアプリケーションを一時停止できます。ただし、Stop ステートメントはオブジェクトへの参照を解放しないため、デバッグ中にのみ使用できます。
Stop ステートメントの詳細については、第 13 章「コードのデバッグとエラーの処理」の「割り込みモードの使用」および『言語リファレンス』の「Stop ステートメント」を参照してください。フォームコレクションまたはオブジェクト参照の解放については、第 9 章「オブジェクトを使用したプログラミング」を参照してください。
アプリケーションでのメニューの使用
多くの単純なアプリケーションはフォームといくつかのコントロールのみで構成されていますが、Visual Basic アプリケーションの機能はメニューを追加することで強化できます。このセクションでは、アプリケーションでメニューを作成および使用する方法について説明します。
メニューエディタでメニューを作成する
メニュー エディタを使用して、新しいメニューとメニュー バーを作成したり、既存のメニューに新しいコマンドを追加したり、既存のメニュー コマンドを独自のコマンドで置き換えたり、既存のメニューやメニュー バーを変更および削除したりできます。
メニューエディタを表示するには:
「ツール」メニューから「メニューエディタ」を選択します。
-または-
ツールバーの「メニューエディタ」ボタンをクリックします。図 6.7 に示すように、メニュー エディタが開きます。
ほとんどのメニュー コントロール プロパティはメニュー エディターで設定できますが、すべてのメニュー プロパティはプロパティ ウィンドウでも使用できます。メニュー コントロールの最も重要なプロパティは次の 2 つです。
名前 - これは、コード内でメニュー コントロールを参照するために使用される名前です。
キャプション - これはコントロールに表示されるテキストです。
Index、Checked、NegotiatePosition などのメニュー エディターのその他のプロパティについては、この章で後述します。
メニューエディタのリストボックスの使用
[メニュー コントロール リスト] ボックス (メニュー エディターの下部にあります) には、現在のフォームのすべてのメニュー コントロールがリストされます。タイトル テキスト ボックスにメニュー項目を入力すると、その項目はメニュー コントロール リスト ボックスにも表示されます。リスト ボックスから既存のメニュー コントロールを選択して、コントロールのプロパティを編集します。
たとえば、図 6.7 は、一般的なアプリケーションの [ファイル] メニューのさまざまなメニュー コントロールを示しています。メニュー コントロール リスト ボックス内のメニュー コントロールの位置によって、コントロールがメニュー タイトル、メニュー項目、サブメニュー タイトル、サブメニュー項目のいずれであるかが決まります。
リスト ボックスの左側にあるメニュー コントロールは、メニュー タイトルとしてメニュー バーに表示されます。
リスト ボックス内のインデントされたメニュー コントロールは、先頭のメニュー タイトルをクリックした場合にのみメニューに表示されます。
インデントされたメニュー コントロールの後に、再度インデントされたメニュー コントロールが続く場合、サブメニューのタイトルになります。サブメニュー タイトルの下にインデントされた各メニュー コントロールは、そのサブメニューのメニュー項目になります。
Caption プロパティとしてハイフン (-) が含まれるメニュー コントロールは、区切りバーとして表示されます。区切りバーはメニュー項目を論理グループに分割します。 メニュー コントロールがメニュー タイトルである場合、サブメニュー項目がある場合、チェックされているか無効になっている場合、またはショートカット キーがある場合、メニュー コントロールは区切りバーとして使用できないことに注意してください。
メニュー エディターでメニュー コントロールを作成するには、次の手順に従います。
1.フォームを選択
2. 「ツール」メニューから「メニューエディタ」を選択します。 -または- ツールバーのメニュー エディター ボタンをクリックします。
3. [タイトル] テキスト ボックスに、メニュー バーの最初のメニュー タイトルとして表示するテキストを入力します。特定の文字をメニュー項目のアクセス キーにしたい場合は、その文字の前に (&) 文字を追加することもできます。メニューでは、この文字には自動的に下線が付きます。
メニュー タイトルのテキストがメニュー コントロール リスト ボックスに表示されます。
4. [名前] テキスト ボックスに、コード内でメニュー コントロールを参照するために使用する名前を入力します。この章で後述する「メニュー タイトルと命名ガイドライン」を参照してください。
5. 左または右の矢印ボタンをクリックして、コントロールのインデント レベルを変更します。
6. 必要に応じて、コントロールの他のプロパティも設定できます。この作業は、メニュー エディターで行うことも、後から「プロパティ」ウィンドウで行うこともできます。
7. [次へ] を選択して、別のメニュー コントロールを作成します。 -または- [挿入]をクリックして、既存のコントロールの間にメニュー コントロールを追加します。上下の矢印ボタンをクリックして、既存のメニュー コントロール間でコントロールを移動することもできます。
8. フォームのすべてのメニュー コントロールが作成されたら、[OK] を選択してメニュー エディタを閉じます。作成したメニュータイトルがフォーム上に表示されます。設計時に、メニュー タイトルをクリックして、対応するメニュー項目をドロップダウンします。
個別のメニュー項目
区切りバーは、メニュー項目間の水平線としてメニューに表示されます。多くの項目を含むメニューでは、区切りバーを使用して項目を論理グループに分割できます。たとえば、図 6.8 に示すように、Visual Basic の「ヘルプ」メニューは区切り線を使用してメニュー項目を 3 つのグループに分割します。
メニュー エディターで区切りバーを作成するには、次の手順に従います。
1. 既存のメニューに区切りバーを追加する場合は、「挿入」を選択し、区切りたいメニュー項目の間にメニュー コントロールを挿入します。
2. 必要に応じて、右矢印ボタンをクリックして、新しいメニュー項目を、分離されたメニュー項目と同じレベルにインデントします。
3. [タイトル] テキスト ボックスにハイフン (-) を入力します。
4.「name」属性を設定します。
5. [OK] を選択してメニュー エディタを閉じます。
区切りバーはメニュー コントロールとして作成されますが、クリック イベントに応答せず、選択できないことに注意してください。
アクセスキーとショートカットキーを割り当てる
アクセス キーとショートカット キーを定義することで、メニュー コマンドへのキーボード アクセスを改善します。
アクセスキー
アクセス キーを使用すると、ALT キーを押して指定した文字を入力してメニューを開くことができます。メニューが開いたら、割り当てられた文字 (アクセス キー) を押すことでコントロールを選択できます。たとえば、ALT E キーを押して「編集」メニューを開き、P キーを押して「貼り付け」メニュー項目を選択します。図 6.9 に示すように、メニュー コントロールのタイトルでは、指定されたアクセス キーが下線付きの文字として表示されます。
メニュー エディターでメニュー コントロールにアクセス キーを割り当てるには、次の手順に従います。
1. アクセスキーを割り当てるメニュー項目を選択します。
2. [タイトル] ボックスで、アクセス キーとして使用する文字の直前に (&) 文字を入力します。
たとえば、図 6.9 に示す [編集] メニューが開いている場合、次の [キャプション] プロパティの設定値が対応するキーに応答します。
メニューでは重複したアクセスキーを使用できないことに注意してください。複数のメニュー項目で同じアクセス キーが使用されている場合、そのキーは効果がありません。たとえば、C が「切り取り」と「コピー」の両方のアクセス キーである場合、「編集」メニューを選択して C を入力すると、「コピー」コマンドが選択されますが、ENTER キーを押した後にのみ、 application このコマンドが実行されます。また、「cut」コマンドはまったく実行されません。
ショートカットキー
ショートカット キーを押すと、メニュー項目がすぐに実行されます。頻繁に使用するメニュー項目にショートカット キーを割り当てることができ、ALT キーを押したままメニュー タイトルを押して文字にアクセスし、メニューを押すという 3 ステップの方法ではなく、1 ステップのキーボード アクセス方法が提供されます。キャラクターにアクセスするためのアイテム。ショートカット キーの割り当てには、CTRL F1 キーや CTRL A キーなどのファンクション キーと制御キーの組み合わせが含まれます。図 6.10 に示すように、これらはメニュー内の対応するメニュー項目の右側に表示されます。
メニュー項目にショートカット キーを割り当てるには、次の手順に従います。
1.「メニューエディタ」を開きます。
2. このメニュー項目を選択します。
3. [ショートカット キー] コンボ ボックスでファンクション キーまたはキーの組み合わせを選択します。
ショートカットキーの割り当てを削除するには、リストの一番上にある「(なし)」を選択します。
ショートカット キーはメニューに自動的に表示されるため、メニュー エディタのタイトル ボックスに CTRL キーを入力する必要はありません。
メニューのタイトルと命名ガイドライン
他のアプリケーションとの一貫性を維持するには、メニューを作成するときに確立された命名ガイドラインに従うことをお勧めします。
キャプションプロパティを設定する
メニュー項目にタイトル値を割り当てるときは、次のガイドラインに従うようにしてください。
1. メニュー内の項目名は一意である必要がありますが、異なるメニュー内の同様のアクション項目には同じ名前を付けることができます。
2. プロジェクト名には、単語、複合語、または複数の単語を使用できます。
3. 各プロジェクト名には、キーボードでコマンドを選択するための固有のメモリ アクセス文字が必要です。別の文字が覚えやすい場合を除き、アクセス文字はメニュー タイトルの最初の文字にする必要があります。2 つのメニュー タイトルで同じアクセス文字を使用することはできません。アクセス キーとショートカット キーの割り当ての詳細については、この章の前半の「メニュー エディタを使用したメニューの作成」セクションを参照してください。
4. ダイアログ ボックスを表示するコマンド (「名前を付けて保存...」、「環境設定...」) など、コマンドが完了する前に追加情報が必要な場合は、名前の後に省略記号 (...) を付ける必要があります。 。
5. プロジェクト名はできるだけ短くしてください。アプリケーションをローカライズすると、外国語バージョンでは単語の長さが 30% 近く増加するため、個々のメニュー項目をリストするのに十分なスペースが確保できなくなる可能性があります。アプリケーションのローカリゼーションの詳細については、第 16 章「国際配布」を参照してください。
メニューの命名規則
コードを読みやすく、保守しやすくするには、メニュー エディターで Name プロパティを設定するときに、確立された命名規則に従うことをお勧めします。ほとんどの命名規則では、接頭辞 (つまり、メニュー コントロールの場合は mnu) とその後にトップレベル メニューの名前 (ファイルなど) を付けてオブジェクトを識別することを推奨しています。サブメニューの場合、この後にサブメニューのタイトルが続きます (mnuFileOpen など)。
詳細については、推奨される命名規則の例については、付録 B「Visual Basic のコーディング規則」を参照してください。推奨される命名規則の例については、「VisualBasic コーディング規則」を参照してください。
->