コントロール

コントロールは、 TControl クラスとそのサブクラスのインスタンスです。更に、ユーザーインターフェースを定義するコンポーネントであることもあります。TControl は、コントロール間の親子関係を定義しています。そして、それは、ユーザーインタフェースの構成要素間の関係に対しても影響を与えます。

コントロールツリー

コントロールは、親子関係を持ち、互いに関連しあっています。各々の親コントロールは、1つ以上の子コントロールを持つことができます。親コントロールは子コントロールのステート遷移を担っています。通常、子コントロールのレンダリング(立体物描画)は、親コントロールのプレゼンテーションを構成することに使用されます。親子関係は、コントロールを集めコントロールツリーとなります。ページは、そのコントロールツリーのルート(根)に配置され、そのコントロールツリーのプレゼンテーションは、エンドユーザーに返されます。
通常、親子関係は、テンプレートの設定されたフレームワークの働きによって確立されます。コード上においては、次のメソッドの一つを使うことで、コントロールを別の子コントロールに明示的に指定することもできます。
$parent->Controls->add($child);
$parent->Controls[]=$child;
ここで、プロパティに指定されているControls は親コントロールに対する子コントロールを指します。

コントロールの識別

各コントロールは、その兄弟コントロールの中でそれ自体を特定することができるIDプロパティを持っています。さらに、各コントロールはそのコントロールが存在するコントロールツリーにおいて、グローバルにそのコントロールを特定するのに使用することができるUniqueIDとClientIDを持っています。UniqueIDとClientIDは非常に似ています。UniqueIDは、ツリーにおいてそのコントロールがある位置を特定するためにフレームワークによって使われます。ClientIDは、HTMLタグIDでクライアント側で主に使用されますが、一般的に、UniqueIDもしくはClientIDの明示的なフォーマットを使うべきではありません。

コンテナ命名

各々のコントロールはそれぞれ”コンテナ命名”を持っています。これは、同じIDをもった複数のコントロールを区別するためにユニーク(単一)の名前空間を作成するコントロールです。例えば、TRepeaterコントロールはそれぞれが、同じIDが付いた子コントロールを持っている複数のアイテムを作成します。これらの子コントロールを区別するために、各アイテムはコンテナ命名を行います。それによって、子コントロールは、それ自身のIDと共にコンテナ命名のIDを使用することで完全に特定されることになります。もうお分かりかもしれませんが、UniqueIDとClientIDはコンテナ命名に依存しています。 コントロールにおいて、コンテナ命名を使うには、INamingContainerインタフェースをインプレメント(継承)します。

ビューステート(状態)とコントロールステート(状態)

HTTP はステートレス(ステート管理をしない)プロコトルです。これは、ユーザとサーバ間の継続的な相互作用のサポートする機能性が持っていないことを意味します。各々のリクエストは他のリクエストと連続性がなく、独立したものだとみなされます。しかしながら、ウェブアプリケーションでは、しばしばユーザーが、従前にどんなリクエストを知らなくてはならないことがあります。以上の様な状況から、一般的には、ステート(状態)の情報を記憶する為にセッションを導入します。
PRADOは、マイクロソフトASP.NETからのビューステートとコントロールステートのコンセプトを借り、さらに完全なステート管理ができるプログラムメカニズムを追加提供しています。ビューステートもしくは、コントロールステートに保存される値は新しい要求が同じユーザによる同じページへのフォーム実行(ポストバックと呼びます。)であるなら、その次の要求に利用することができます。ビューステートとコントロールステートの違いは、コントロールステートが利用不可にできないのに対し、ビューステートは利用不可にできるという点です。
ビューステートとコントロールステートは TControlにおいてインプレメント(継承)されます。それらは、一般的に、コントロールの様々なプロパティを定義するのに用いられます。ビューステートもしくは、コントロールステートに対して、値をセーブしたり、検索するには、次の方法を使用してください。
   $this->getViewState(’Name’,$defaultValue);
   $this->setViewState(’Name’,$value,$defaultValue);
   $this->getControlState(’Name’,$defaultValue);
   $this->setControlState(’Name’,$value,$defaultValue);
ここで言う \( this は、コントロールインスタンスのことであり、Name は持続的に保存される値を特定できるキーを指します。 \)defaultValue はオプションです。ビューステートもしくはコントロールステートから値を検索した際に、ヒットする値がない場合に、この値が返されます。