オブジェクトの作成
オブジェクトを作成する最も簡単な方法は、ツールボックス内のコントロールをダブルクリックすることです。ただし、Visual Basic や他のアプリケーションで使用できるすべてのオブジェクトを最大限に活用するには、Visual Basic のプログラム機能を使用して実行時にオブジェクトを作成します。
1. オブジェクト変数を使用してオブジェクト参照を作成する
2. クラスモジュールを使用して独自のオブジェクトを「最初から」作成します
3. コレクション オブジェクトを使用して独自のコレクションを作成する
オブジェクトにアクセスする方法の詳細については、他の章で説明します。たとえば、CreateObject 関数と GetObject 関数については、第 10 章「コンポーネントを使用したプログラミング」で説明します。
オブジェクト変数を使用する
変数は値を保存するだけでなく、オブジェクトを参照することもできます。変数に値を割り当てるのと同じように、同じ理由でオブジェクトを変数に割り当てることができます。
1. 変数名は、変数名に含まれる値 (この場合は参照するオブジェクト) よりも短く、覚えやすい傾向があります。
2. コードを実行するとき、他のオブジェクトを参照するには変数を変更する必要があります。
3. オブジェクト自体を繰り返し参照するよりも、オブジェクトを含む変数を参照する方が効率的です。
オブジェクト変数の使用は、オブジェクトを変数に割り当てる追加の手順があることを除いて、通常の変数の使用と同じです。
4. まず変数を宣言します。
DimvariableAsclass
5. 次に、オブジェクトを変数に代入します。
変数を設定=オブジェクト
オブジェクト変数を宣言する
オブジェクト変数の宣言方法は、他の変数の宣言と同じで、Dim、ReDim、Static、PRivate、および Public を使用します。唯一の違いは、オプションの New キーワードと Class パラメータです。これらについては、この章で後ほど説明します。構文は次のとおりです。
{Dim|ReDim|Static|Private|Public}variableAs[New]class
たとえば、アプリケーション内の frmMain という名前のフォームを参照するオブジェクト変数を宣言できます。
DimFormVarAsNewfrmMain '型を frmMain として宣言します
' オブジェクト変数。
アプリケーション内の任意のフォームを参照するオブジェクト変数を宣言することもできます。
DimanyFormAsForm '一般的なフォーム変数。
同様に、アプリケーション内の任意のテキスト ボックスを参照できるオブジェクト変数を宣言できます。
DimanyTextAsTextBox ' 任意のテキスト ボックスを参照できます
' (ただしテキスト ボックスのみ)。
任意のタイプのコントロールを参照できるオブジェクト変数を宣言することもできます。
DimanyControlAsControl '一般的な制御変数。
アプリケーション内の特定のフォームを参照するフォーム変数は宣言できますが、特定のコントロールを参照するコントロール変数は宣言できないことに注意してください。特定のタイプのコントロール (TextBox や ListBox など) を参照するコントロール変数を宣言できますが、そのタイプの特定のコントロール (txtEntry や List1 など) を参照することはできません。ただし、特定のコントロールをそのタイプの変数に割り当てることができます。たとえば、リスト ボックス lstSample を含むフォームは次のようにコーディングできます。
DimobjDemoAsListBox
SetobjDemo=lstSample
代入オブジェクト変数
Set ステートメントを使用して、オブジェクトをオブジェクト変数に割り当てます。
変数を設定=オブジェクト
オブジェクト変数でオブジェクトを参照したい場合は、Set ステートメントを使用できます。
場合によっては、オブジェクト変数、特に制御変数を使用して、入力するコードを直接短縮することができます。たとえば、元のコードは次のようになります。
IffrmAccountDisplay!txtAccountBalance.Text<0Then
frmAccountDisplay!txtAccountBalance.BackColor=0
frmAccountDisplay!txtAccountBalance.ForeColor=255
EndIf
制御変数を使用すると、プログラムを大幅に短縮できます。
DimBalAsTextBox
SetBal=frmAccountDisplay!txtAccountBalance
IfBal.Text<0Then
Bal.BackColor=0
Bal.ForeColor=255
EndIf
特定のオブジェクト タイプと一般的なオブジェクト タイプ
特定のオブジェクト変数は、特定の種類のオブジェクトまたはクラスを参照する必要があります。特定のフォーム変数は、アプリケーション内の 1 つのフォームのみを参照できます (ただし、そのフォームの多数のインスタンスの 1 つで参照できます)。同様に、特定のコントロール変数は、TextBox や ListBox など、アプリケーション内の特定の種類のコントロールのみを参照できます。例を参照して、新しいプロジェクトを開いてフォームにテキスト ボックスを配置してください。次のコードをフォームに追加します。
PrivateSubForm_Click()
DimanyTextAsTextBox
SetanyText=Text1
anyText.Text=こんにちは
EndSub
アプリケーションを実行し、フォームをクリックします。テキスト ボックスの Text プロパティが Hello に変わります。
一般オブジェクト変数は、いくつかの特定のオブジェクト タイプの 1 つを参照できます。たとえば、一般フォーム変数はアプリケーション内の任意のフォームを参照でき、一般制御変数はアプリケーション内の任意のフォーム上の任意のコントロールを参照できます。例を参照して、新しいプロジェクトを開き、いくつかのフレーム、ラベル、およびコマンドボタン コントロールをフォーム上に任意の順序で配置します。次のコードをフォームに追加します。
PrivateSubForm_Click()
DimanyControlAsControl
SetanyControl=Form1.Controls(3)
anyControl.Caption=こんにちは
EndSub
プログラムを実行し、フォームをクリックします。フォーム上に配置した 3 番目のコントロールのタイトルが「Hello」に変わります。
Visual Basic には 4 つの一般的なオブジェクトがあります。
一般オブジェクト変数は、変数が特定の型のオブジェクトを参照しているかどうかが実行時に不明な場合に便利です。たとえば、アプリケーション内の任意のフォームで動作するコードを作成する場合は、一般的なフォーム変数を使用する必要があります。
アプリケーション内に存在できる MDI フォームは 1 つだけであるため、一般的な MDIForm タイプを使用する必要はないことに注意してください。 MDI フォームを参照するフォーム変数を宣言する必要がある場合は、一般的な MDIForm タイプの代わりに、特定の MDIForm タイプ (MDIForm1 または MDI フォームの Name プロパティで指定した名前) を使用できます。実際、Visual Basic はアプリケーションを実行する前に特定のフォーム タイプを参照するプロパティとメソッドを決定できるため、常に特定の MDIForm タイプを使用する必要があります。
一般的な MDIForm タイプは、完全性を確保するためにのみ提供されており、Visual Basic の将来のバージョンでは、単一のアプリケーションに複数の MDI フォームを含めることができるようになります。
オブジェクトとしての形
フォームは、アプリケーション インターフェイスを構築するために最も一般的に使用されますが、アプリケーション内の他のモジュールによって呼び出されるオブジェクトであることもよくあります。フォームはクラス モジュールと密接に関連しています。 2 つの主な違いは、フォームは視覚的なオブジェクトであるのに対し、クラス モジュールには視覚的なインターフェイスがないことです。
カスタムメソッドとプロパティを追加する
カスタム メソッドとプロパティをフォームに追加し、アプリケーション内の他のモジュールからアクセスできます。フォームに新しいメソッドを作成するには、Public で宣言されたプロシージャを追加します。
'Form1をカスタマイズする方法。
PublicSubLateJobsCount()
。
. '<ステートメント>
。
EndSub
LateJobsCount プロシージャは、次のステートメントを使用して他のモジュールから呼び出すことができます。
Form1.LateJobsCount
フォームの新しいプロパティの作成は、フォーム モジュールでパブリック変数を宣言するだけで簡単です。
PublicIDNumberAsInteger
次の 2 つのステートメントを使用して、Form1 の IDNumber 値を設定し、他のモジュールから返すことができます。
フォーム1.ID番号=3
Text1.Text=Form1.IDNumber
Property プロシージャを使用してカスタム プロパティをフォームに追加することもできます。
詳細第 9 章「オブジェクトを使用したプログラミング」では、プロパティ プロシージャの詳細を説明します。
フォームを読み込まずにフォームの変数またはカスタム メソッドを呼び出すことができ、フォームのカスタム プロパティを設定することもできることに注意してください。その結果、フォームをメモリにロードせずに、フォームに関するコードを実行できます。同様に、プロパティやメソッドを参照せずにコントロールを参照すると、フォームは読み込まれません。
新しいキーワードを使用する
New キーワードを使用して新しいオブジェクトを作成します。このオブジェクトは、そのクラスによって定義されたオブジェクトとして扱われます。 New を使用して、クラス モジュールで定義されたコレクション、フォーム、クラスのインスタンスを作成できます。
フォームで New キーワードを使用する
設計時に作成されたフォームはクラスです。このクラスの新しいインスタンスは、New キーワードを使用して作成できます。このプロセスの動作を確認するには、フォーム上にコマンド ボタンとその他のいくつかのコントロールを描画します。 [プロパティ] ウィンドウで、フォームの Name プロパティを Sample に設定します。コマンド ボタンの Click イベント プロシージャに次のコードを追加します。
DimxAsNewSample
x.表示
アプリケーションを実行し、コマンド ボタンを数回クリックします。一番前のフォームを脇に移動します。フォームはビジュアル インターフェイスを備えたクラスであるため、追加のコピーが表示されます。各フォームには、フォームが設計されたのと同じ場所に同じコントロールがあります。
フォーム変数とロードされたフォームのインスタンスが常に存在するようにするには、ローカル変数の代わりに静的変数またはパブリック変数を使用することに注意してください。
Set ステートメントで New キーワードを使用することもできます。コマンド ボタンの Click イベント プロシージャのコードを試してください。
DimfAsForm1
Setf=NewForm1
f.Caption=こんにちは
f.表示
Set ステートメントで New キーワードを使用すると実行速度が向上するため、この方法をお勧めします。
他のオブジェクトで New キーワードを使用する
New キーワードを使用すると、クラス モジュールで定義されたクラスからコレクションとオブジェクトを作成できます。次の例を使用して、この作業プロセスを説明します。
この例は、New キーワードがクラスのインスタンスを作成する方法を示しています。新しいプロジェクトを開き、Form1 に CommandButton コントロールを描画します。 「プロジェクト」メニューから「クラスモジュールの追加」コマンドを選択して、クラスモジュールをプロジェクトに追加します。クラス モジュールの Name プロパティを ShowMe に設定します。
Form1 の次のコードは、ShowMe クラスの新しいインスタンスを作成し、クラス モジュールに含まれるプロシージャを呼び出します。
PublicclsNewAsShowMe
PrivateSubCommand1_Click()
SetclsNew=NewShowMe
clsNew.ShowFrm
EndSub
クラス モジュールの ShowFrm プロシージャは、クラス Form1 の新しいインスタンスを作成し、フォームを表示し、最小化します。
SubShowFrm()
DimfrmNewAsForm1
SetfrmNew=NewForm1
frmNew.Show
frmNew.WindowState=1
EndSub
この例を適用するには、アプリケーションを実行し、コマンド ボタンを数回クリックします。 ShowMe クラスの新しいインスタンスが作成されるたびに、最小化されたフォーム アイコンがデスクトップに表示されます。
New を使用してオブジェクトを作成する方法の詳細は、第 10 章「コンポーネントを使用したプログラミング」を参照してください。
新しいキーワード制限
次の表は、New キーワードで実行できないことを説明しています。
オブジェクトへの参照を解放します
すべてのオブジェクトはメモリとシステム リソースを使用します。オブジェクトが使用されなくなったら、これらのリソースをすぐに解放することをお勧めします。
Unload を使用して、フォームまたはコントロールをメモリからアンロードします。
オブジェクト変数によって占有されているリソースを解放するには、[なし] を使用します。 Set ステートメントを使用して、オブジェクト変数に Nothing を代入します。
詳細については、 『Visual Basic 6.0 言語リファレンス マニュアル』の「アンロード イベント」および「なし」セクションを参照してください。
オブジェクトをプロシージャに渡す
Visual Basic ではオブジェクトをプロシージャに渡すことができます。次のコード例では、フォームにコマンド ボタン コントロールがあることを前提としています。
PrivateSubCommand1_Click()
' Demo サブルーチンを呼び出してフォームに渡します。
デモフォーム1
EndSub
PrivateSubDemo(xAsForm1)
' フォームを画面の中央に配置します。
x.Left=(画面の幅-x.幅)/2
EndSub
参照によってオブジェクトをパラメータに渡し、プロシージャ内でそのパラメータを新しいオブジェクトに設定できます。これの動作を確認するには、プロジェクトを開いて 2 番目のフォームを挿入します。各フォームに画像ボックスを配置します。変更が必要な属性設定値は以下の表のとおりです。
Form1_Click イベント プロシージャは、Form2 の GetPicture プロシージャを呼び出し、空のピクチャ ボックスを渡します。
PrivateSubForm_Click()
Form2.GetPicturePicture1
EndSub
Form2 の GetPicture プロセスは、Form2 のピクチャ ボックスの Picture プロパティを Form1 の空のピクチャ ボックスに割り当てます。
プライベートobjXapictureBox
PublicSubGetPicture(xAsPictureBox)
'渡されたピクチャフレームをオブジェクト変数に代入します。
SetobjX=x
'Form1 のピクチャ ボックスにピクチャ属性値を割り当てます。
objX.Picture=picture2.Picture
EndSub
この例を適用するには、プログラムを実行し、Form1 をクリックします。 Form2 のアイコンが Form1 の画像ボックスに表示されるのがわかります。
詳細上記のトピックは、オブジェクトの概要を提供することを目的としています。詳細については、第 9 章「オブジェクトを使用したプログラミング」および第 10 章「コンポーネントを使用したプログラミング」を参照してください。
->