ASPNETは、DropDownListコントロールに入力することができます達成したい、例えば、いくつかのコントロール自分のニーズに応じてカスタマイズしたいと思います、我々はこれらのコントロールが十分ではないと感じ、しかし、何度も、コントロールの多くを提供してくれ、ASPNETはをご提供していませんでしたコントロールは、その後、あなたは私たちのニーズに合わせてカスタムコントロールを記述する必要があります。ASPNETの開発であることを意図記事のこのシリーズは、エントリーレベルの導入を制御し、あなたがより詳細で、深さの参照を知りたい場合もあり、「ASP.NET 2.0コントロール開発する詳細な分析」と「技術を開発するために、垂直カットASP.NET 3.5のコントロールとコンポーネント」を、この両方をブック。
自宅に近いほど、私たちは通常、カスタムコントロールを開発するには、あなたがコードコンパイラは、DLLファイル、私たち自身の発展を制御し、このDLLファイルを生成します書いた後、クラスライブラリプロジェクトを作成します。以下の方法で我々のプロジェクトの制御に使用することができ、今すでにHelloWorld.dllという名前のコントロールを持っていると仮定します。
1ツールボックスで右クリック - > [タブを追加します。タブには、例えば、名前を付けることができます。MyControls
>選択項目 - 2右タブ領域は、新たに追加しました。ファイルを選択した後HelloWorld.dll OK、あなたは以下に示すようにコントロールは、ツールボックスに追加されましたを参照してください。
3つの使用のカスタムコントロールと直接ページに、共通ASPNETコントロールを使用することができます。ページへのドラッグコントロールした後、ソースビューには、次のコードを追加します。
<%@ 登録アセンブリ= "ControlsDemo1" 名前空間= "ControlsDemo1" TagPrefix = "CC1" %> < CC1 :HelloWorldのID = "HelloWorld2" にrunat = "サーバー"> </ CC1 :HelloWorldの>
次のように上記のコードの最初の行を制御するために登録されている、TagPrefixのprefix属性は、コントロールを指定し、CC1は、デフォルトの接頭辞で、我々はまた、あなたの好みのプレフィックスにカスタマイズすることができます。
<%@ 登録アセンブリ= "ControlsDemo1" 名前空間= "ControlsDemo1" TagPrefix = "oec2003" %> < oec2003 :HelloWorldのID = "HelloWorld1" にrunat = "サーバー"> </ oec2003 :HelloWorldの>
<%@ Resgiter />コマンドを単一のページを除いて、我々はまた、web.configファイルのグローバル使用を渡すように構成することができますすることができます。次のようにweb.configファイルの設定は次のとおりです。
< のsystem.web > < ページ> < コントロール> < 追加アセンブリ= " ControlsDemo1 " 名前空間= " ControlsDemo1 " tagPrefix = " oec2003 " /> </ コントロール> </ ページ> </ のsystem.web >
すでに書かれたカスタムを使用して、カスタムコントロールを書くことは通常クラスライブラリプロジェクトを作成することであることを知っている方に上記の簡単な紹介。今カスタムコントロールの特定の実装を見てみましょう。
カスタムコントロールを実装し、我々は基本クラスを選択する必要があり、基底クラスは、以下の3つのクラスが必要な最も基本的な機能を制御する制御共通の基底クラスを開発することです。
たSystem.Web.UI。コントロール System.Web.UI.WebControls.WebControl System.Web.UI.WebControls.CompositeControl
コントロール:コントロールの開発のための基底クラスは、すべてのコントロールは、直接または間接的にクラスを継承しています。クラスのスケーラビリティと最強の柔軟性。
WebBrowserコントロール:このクラスは、Controlクラスから継承するすべての属性のコントロールに加えて、それはまた、このようなレイアウトスタイルなどの機能を提供します。スタイルの要件のレイアウトや外観の高い制御のためのより適切な。コントロールと同じことが、単一のコントロールの開発に適用されます。
CompositeControl:基底クラスへの制御はAspNet2.0を提供します。あなたがコントロールコントロールを組み合わせ、既存の組み合わせを作成したい場合は、そのような継承WebBrowserコントロール、継承され、INamingContainerインターフェイスを実装することができます。
私達はちょうど1 ASPNET既存のコントロールのある拡張が簡単であれば、我々は基本クラスとして既存のコントロールのいずれかを使用することができます。
制御最も基本的かつ最も柔軟な、制御クラスを実装する最初は、単純なHelloWorldの制御の基本クラスです。クラスHelloWorldの中で新しいプロジェクトを作成し、コントロールを継承し、次のように、Renderメソッドをオーバーライドします。
パブリッククラスのHelloWorld :コントロール { 保護されたオーバーライド無効レンダリング(たHtmlTextWriter ライター) { writer.WriteLine("Hello Worldの!" ); } }
ツールボックスに追加された上記の方法に従ってコンパイルされ、その後、ページ上のテキストを実行した後にこんにちは、世界を表示するページをドラッグします。今、テキスト表示エリアプラス境界線と背景色のように、Hello Worldの変更を行うには、上記のコードのために、次のように:
パブリッククラスのHelloWorld :コントロール { 保護されたオーバーライド・ボイドはレンダリング(たHtmlTextWriter ライター) { writer.WriteLine(@ "<divのスタイル=" "幅:200pxの;高さ:100pxに; 国境:1pxの固体#4DA9C2;背景色:#1 C3D9FF"」 >」); writer.WriteLine("Hello Worldの!" ); writer.WriteLine(@ "</ DIV>" ); } }
業績後:
効果が出てきたが、コードは直接出力htmlコードとインラインスタイルを使用することで、もちろんこれは、クライアントのHTMLコード形式にエラーをキャプチャし、生成する良い、良いではないではありませんが、良いではありません。この問題は、私たちHtmlTextWriterAttribute、たHtmlTextWriterTag、HtmlTextWriterStyle 3つの列挙することによって解決することができます。以下のコードを見てください:
public class HelloWorld:Control { protected override void Render(HtmlTextWriter writer) { writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "1px"); writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "solid"); writer.AddStyleAttribute(HtmlTextWriterStyle.BorderColor, "#4DA9C2"); writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "#C3D9FF"); writer.AddStyleAttribute(HtmlTextWriterStyle .Width、"200pxの" ); writer.AddStyleAttribute(HtmlTextWriterStyle .Height、"100pxに" ); writer.RenderBeginTag(たHtmlTextWriterTag .Div)。 writer.WriteLine("Hello Worldの!" ); writer.RenderEndTag(); } }
動作結果と、上記と同じ後。そして、ページのソースコードは、標準生成されたHTMLのインデントを持ってこのように見ることができます表示、およびコードは、XHTMLの標準と一致している、HTMLコードを綴るする代わりに、直接のこのような方法での利用を行うことをお勧めします。
:次のように事業部事業部、コードになるように、今、我々はそれを書き換える必要があるとAddAttributesToRenderのRenderContents TagKeyプロパティとメソッドスパンデフォルトTagKeyの、上記の結果を実装するための基本クラスとしてされて使用され、私たちは書き換える必要がWebBrowserコントロール
保護されたオーバーライドたHtmlTextWriterTag TagKey { 取得 { 返したHtmlTextWriterTag .Divを。 } }
AddAttributesToRender divのスタイルとプロパティを設定するために使用される方法
保護されたオーバーライドボイドAddAttributesToRender(たHtmlTextWriter ライタ) { 基地.AddAttributesToRender(ライター)。 writer.AddStyleAttribute(HtmlTextWriterStyle .BorderWidth、"1ピクセル" )。 writer.AddStyleAttribute(HtmlTextWriterStyle .BorderStyle、"固体" )。 writer.AddStyleAttribute(HtmlTextWriterStyle .BorderColor、"#1 4DA9C2" ); writer.AddStyleAttribute(HtmlTextWriterStyle .BackgroundColor、"#1 C3D9FF" ); writer.AddStyleAttribute(HtmlTextWriterStyle .Width、"200pxの" ); writer.AddStyleAttribute(HtmlTextWriterStyle .Height、"100pxに" ); }
保護されたオーバーライド無効のRenderContents(たHtmlTextWriter ライター) { writer.WriteLine("Hello Worldの!" ); }
完全なコードWebBrowserコントロールの基本クラスを使用してください:
パブリッククラスのHelloWorld :WebBrowserコントロール { 保護されたオーバーライドたHtmlTextWriterTag TagKey { 取得 { 返したHtmlTextWriterTag .Divを。 } } 保護オーバーライドボイドAddAttributesToRender(たHtmlTextWriter ライタ) { 基地.AddAttributesToRender(ライター)。 writer.AddStyleAttribute(HtmlTextWriterStyle .BorderWidth、"1ピクセル" )。 writer.AddStyleAttribute(HtmlTextWriterStyle .BorderStyle、"固体" )。 writer.AddStyleAttribute(HtmlTextWriterStyle .BorderColor、"#1 4DA9C2" ); writer.AddStyleAttribute(HtmlTextWriterStyle .BackgroundColor、"#1 C3D9FF" ); writer.AddStyleAttribute(HtmlTextWriterStyle .Width、"200pxの" ); writer.AddStyleAttribute(HtmlTextWriterStyle .Height、"100pxに" ); } 保護されたオーバーライド無効のRenderContents(たHtmlTextWriter ライター) { writer.WriteLine("Hello Worldの!" ); } }
本論文では、カスタムコントロールを使用することを記載して、簡単な実装について話をすると、カスタム基本クラスを行うには別のクラスを使用して、コントロールの開発への扉に入ったことを指摘しておかなければ、とCompositeControlおよびその他のコンテンツ上で、深さよりになります後述します。
ます。https://www.cnblogs.com/zhangchenliang/archive/2011/05/22/2053722.htmlで再現