2013年3月16日土曜日
オブジェクト変数に値を割り当てる
変数は同じ型または代入互換である場合、あなたは、同じ種類または代入互換の型の変数にオブジェクト以外の任意の型の変数を割り当てることができます同じように、別のオブジェクトのポインタ変数に1つのオブジェクトのポインタ変数を割り当てることができます。変数はForm1とForm2がTFormのへのポインタとして宣言されている場合たとえば、あなたはForm2にForm1を割り当てることができます。
Form2をForm1に=;
あなたに値を代入している変数の型が代入される変数の型の先祖である場合にも、別のオブジェクトのポインタ変数にオブジェクトのポインタ変数を割り当てることができます。例えば、ここにTDataFormクラス宣言は、次のとおりです。
クラスTTDataForm:公共TFormは
{
__published:/ / IDE管理のコンポーネント
TButtonは* Button1を;
TEditに* EDIT1;
TDBGrid * DBGrid1;
TDatabaseは* Database1の;
プライベート:/ /ユーザー宣言
public:/ /公開ユーザ宣言
仮想__fastcallのTTDataForm(TComponentは* OWNER);
};
ここでは、2つのオブジェクトの宣言であり、型TFormの一つ、タイプTDataFormの一つは:
TDataForm * DataFormは;
TFormの* AForm;
AFormはTFormの型へのポインタであり、DataFormはTDataFormへのポインタ型のです。 TDataFormはTFormのの子孫であるため、この代入文は有効です。
AForm = DataFormは;
なぜこれが重要なのか、疑問に思うかもしれません。アプリケーションがイベントハンドラを呼び出した時に舞台裏で何が起こるか見てみるとその理由を示しています。
あなたがボタンのOnClickイベントのイベントハンドラを作成するとします。ボタンがクリックされると、OnClickイベントのイベントハンドラが呼び出されます。
各イベントハンドラはTObjectへのポインタ型のSenderパラメータを持っています。たとえば、この空のButton1ClickハンドラでSenderパラメータの点に注意してください。
ボイド__fastcallのTForm1に:: Button1Click(TObjectを*送信者)
{
}
TObjectはC + + Builderのビジュアルコンポーネントライブラリの階層構造の最上位にあります。つまり、すべてのC + + BuilderのオブジェクトがTObjectの子孫であることを意味します。 SenderはTObjectのタイプのものであるため、任意のオブジェクトは、Senderに割り当てることができます。あなたが代入を行うコードが表示されませんが、イベントが発生するコンポーネントまたはコントロールが送信者に割り当てられています。これは、送信者の値は常に発生したイベントに応答するコントロールまたはコンポーネントであることを意味します。
どのようにこの情報は役立ちましたか?あなたは、イベントハンドラと呼ばれるコンポーネントやコントロールの型を見つけるためにSenderをテストすることができます。たとえば、次のように
するif(typeid演算(*送信者)== typeid演算(TEditに))
doSomethingの;
他DoSomethingElse;
...
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿