トップ回答者
複合コントロールにDrag&Dropしたコントロールを中間に表示するには?

質問
-
こんにちは、さとくんパパ♪こと古谷です。お世話になっています。
ASP.NET 2.0で作成するカスタムWebサーバーコントロールについて質問させていただきます。①Labelと②TextBoxと③Buttonから成る複合カスタムコントロール(CompositeControlから派生)があります。
CompositeControlはWebControlを継承するので、他のコントロールのコンテナになれます。このとき、デザイナ上でツールボックスよりDrag&Dropしたり、ソースに直接書き込むなどして、この複合コントロール上に配置した他のコントロール(何でもOK。PanelでもGridViewでも。)を、この複合コントロールのてっぺんではなく、中間(=例えば①と②の間)にレンダリングする事は可能でしょうか?もし可能であれば、どのような実装を行えばよいかご教授ください。
どうかよろしくお願いいたします。
回答
-
> デザイナ上でツールボックスよりDrag&Dropしたり、ソースに直接書き込むなどして、この複合コントロール
> 上に配置した他のコントロール(何でもOK。PanelでもGridViewでも。)を、この複合コントロールのてっぺん
> ではなく、中間(=例えば①と②の間)にレンダリングする事は可能でしょうか?「ソースに直接書き込む」というのは、複合コントロールのソースを書き換えるのではなく、複合コントロールを
配置した aspx のソースに書き込むという意味ですよね? そうであれば、不可能だと思います(もちろん、デザ
イン画面でドラッグ&ドロップするのも不可)。「この複合コントロールのてっぺんではなく」と書かれていますが、それは複合コントロールの中ではなく、外に
追加できたのですよね?複合コントロールのソースを書き換えるか、それを継承した新しい複合コントロールを作って、必要なプロパティ
を追加し、CreateChildControls メソッドを override して再定義するほか方法はないと思います。- 回答としてマーク 高橋 春樹 2009年8月3日 2:04
すべての返信
-
> デザイナ上でツールボックスよりDrag&Dropしたり、ソースに直接書き込むなどして、この複合コントロール
> 上に配置した他のコントロール(何でもOK。PanelでもGridViewでも。)を、この複合コントロールのてっぺん
> ではなく、中間(=例えば①と②の間)にレンダリングする事は可能でしょうか?「ソースに直接書き込む」というのは、複合コントロールのソースを書き換えるのではなく、複合コントロールを
配置した aspx のソースに書き込むという意味ですよね? そうであれば、不可能だと思います(もちろん、デザ
イン画面でドラッグ&ドロップするのも不可)。「この複合コントロールのてっぺんではなく」と書かれていますが、それは複合コントロールの中ではなく、外に
追加できたのですよね?複合コントロールのソースを書き換えるか、それを継承した新しい複合コントロールを作って、必要なプロパティ
を追加し、CreateChildControls メソッドを override して再定義するほか方法はないと思います。- 回答としてマーク 高橋 春樹 2009年8月3日 2:04
-
SurferOnWwwさん、レスありがとうございました。
>複合コントロールを配置した aspx のソースに書き込むという意味ですよね?
>そうであれば、不可能だと思います(もちろん、デザイン画面でドラッグ&ドロップするのも不可)。
なる程、CompositeControlそのものはContainerにはならないということですよね?
最初の質問をする前に複合コントロールにテキストボックスをD&D出来たように錯覚していたのですが、よくよく見てみたら、ご指摘の通り複合コントロールの外側に配置されていました。
ご指摘大変ありがとうございました。
それにしても、どこか一部分をコンテナとして設定可能な複合コントロールがあるといいですね。
代替方法としては、最初の質問の例で言うと、①を非表示にするオプションをプロパティとして設定して、このコントロールを配置するページ側の設定でてっぺんに①に相当するLabelを、その下に元々ラベルの下に配置したかったコントロールを、でその下に複合コントロールを配置するという方法で対応するしかなさそうです。