.NETコントロールのカスタマイズ方法
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>.NET開発]]
--[[Windows Forms]]
--[[ASP.NET Web Forms]]
* 目次 [#xe7a23df]
#contents
*概要 [#a6c161e7]
.NET Frameworkでは、画面の開発に必要となるコントロールが...
.NETでは、これらのコントロールの動作をカスタマイズするこ...
(例えば、自動編集処理、自動入力チェック処理、サニタイジ...
ここでは、この.NETコントロール([[ASP.NET Web Forms]], [[...
*[[ASP.NET Web Forms]] [#s5af500d]
[[ASP.NET Web Forms]]で使用するコントロールの特徴は、Web...
-表示はHTMLにより行われるのでカスタマイズしやすい。
-ただし、状態の持ち回りについて考慮する必要がある。
という点である。
**クラス定義 [#t4162e0b]
以下は、ラベル コントロール(System.Web.UI.WebControls.La...
[assembly: TagPrefix("Ctrl", "my_wcc")]
namespace Ctrl {
/// <summary>System.Web.UI.Labelのカスタム・コントロー...
[DefaultProperty("Text"),
ToolboxData("<{0}:WebCustLabel runat=server></{0}:WebC...
public class WebCustLabel : Label
このクラス定義に含まれる「[[ToolboxData>http://msdn.micro...
**プロパティ [#cf8f9890]
***カスタム プロパティの追加 [#w0e6cbab]
本項ではカスタム プロパティの追加方法について説明する。~
カスタム プロパティを追加する際は、通常通りにプロパティ ...
/// <summary>コントロール内のテキストを反転するかどうか...
[DefaultValue("false"),
Category("動作"),
Description("コントロール内のテキストを反転するかどうか...
public bool Reverse {
set { this.ViewState["Reverse"] = value; }
get {
return (this.ViewState["Reverse"] == null) ?
false : (bool)this.ViewState["Reverse"];
}
}
-ただし、[[ASP.NET Web Forms]]アプリケーションにおいてコ...
-また、ここでも同様にオプションとして、「[[DefaultValue>h...
|メンバ名|説明|デフォルト値|h
|DefaultValue|デフォルト値を表す。|-|
|Browsable|プロパティをPropertyGridに表示するかどうかを指...
|Category|プロパティをまとめるカテゴリ。&br;カテゴリには...
|Description|プロパティの設定を行う際の参考としてProperty...
***既存プロパティのカスタマイズ [#s2db5d89]
-本項では既存プロパティのカスタマイズ(オーバーライド)方...
-また、何からの処理を追加した後、「base.オーバーライドし...
***Label.Textのカスタマイズ [#u4099ba9]
以下は、Textプロパティをオーバーライドしカスタム動作を実...
/// <summary>Textプロパティに機能を追加実装する。</summa...
public override string Text {
// ベースのプロパティを使用する。
set {
string temp = value;
// カスタム動作の処理を実装する。
base.Text = temp;
}
get {
string temp = base.Text;
// カスタム動作の処理を実装する。
return temp;
}
}
***TextBox.Enabled, ReadOnlyのカスタマイズ [#lcd25c63]
-なお、以下は、テキストボックス コントロール(System.Web....
-ここでは、Enabledプロパティのsetterメソッド内部で、実際...
-このカスタマイズにより、Enabledプロパティの挙動をReadOnl...
/// <summary>活性・非活性を、Enabledから、ReadOnlyに変更...
public override bool Enabled {
set {
this.ReadOnly = !value;
}
// getは親のEnabledのgetを使用
}
また、背景色をグレーに変更するにあたって、元の背景色のバ...
/// <summary>ReadOnlyプロパティに背景変更処理を追加する...
public override bool ReadOnly {
// ベースのプロパティを使用する。
set {
base.ReadOnly = value;
// 背景変更
if (base.ReadOnly) {
this.ViewState["bkBgColor"] = this.BackColor;
this.BackColor = System.Drawing.Color.LightGray;
}
else {
this.BackColor =
(this.ViewState["bkBgColor"] == null)
? this.BackColor : (System.Drawing.Color)this....
}
}
get {
return base.ReadOnly;
}
}
**UIのカスタマイズ [#jc51310c]
[[ASP.NET Web Forms]]で使用するコントロールは、表示の制御...
***Render系メソッド [#y4342c87]
ここで出力されるHTMLのカスタマイズは、Render系メソッドの...
カスタム コントロールをControlクラスから派生させて[[スク...
それ以外の場合は、必要に応じて動作変更するようにして、動...
***[[HtmlTextWriterクラス>http://msdn.microsoft.com/ja-jp...
Render系メソッドにおいてHTMLを描画するには、引数に渡され...
-[[RenderBeginTagメソッド>http://msdn.microsoft.com/ja-jp...
-[[WriteFullBeginTagメソッド>http://msdn.microsoft.com/ja...
-[[Writeメソッド>http://msdn.microsoft.com/ja-jp/library/...
-[[RenderEndTagメソッド>http://msdn.microsoft.com/ja-jp/l...
-[[WriteEndTagメソッド>http://msdn.microsoft.com/ja-jp/li...
などがある。
余談となるが、HtmlTextWriterは TextWriterのDecoratorとし...
***[[System.Web.UI.Control.Renderメソッド>http://msdn.mic...
Renderメソッドには、必要に応じてHTML描画コードをオーバー...
RenderメソッドのHTML描画処理は、更に、以下の3つのメソッド...
-[[System.Web.UI.WebControls.WebControl.RenderBeginTagメ...
-[[System.Web.UI.WebControls.WebControl.RenderContentsメ...
-[[System.Web.UI.WebControls.WebControl.RenderEndTagメソ...
例えば、次のような実装を行うと、コントロールのHTML出力と...
/// <summary>RenderBeginTagのテスト</summary>
public override void RenderBeginTag(HtmlTextWriter outpu...
output.Write("<test>");
}
/// <summary>RenderContentsのテスト</summary>
protected override void RenderContents(HtmlTextWriter ou...
output.Write("test");
}
/// <summary>RenderEndTagのテスト</summary>
public override void RenderEndTag(HtmlTextWriter output) {
output.Write("</test>");
}
***[[System.Web.UI.Control.RenderControlメソッド>http://m...
RenderControlメソッドは、上記のRenderメソッドの制御コード...
***DisplayRawTextカスタム プロパティの実装例(Render) [#...
以下は、カスタム プロパティによって、HTMLの描画処理を変更...
/// <summary>
/// Renderメソッドは、
/// ・RenderBeginTag(開始のタグ)
/// ・RenderContents(中間の部分)
/// ・RenderEndTag(終了のタグ)
/// の各メソッドをこの順に呼び出して、コントロールをクラ...
/// </summary>
/// <remarks>
/// このメソッドは、表示中にページによって自動的に呼び出...
/// また、このメソッドは、主にコントロールの開発者によっ...
/// </remarks>
protected override void Render(HtmlTextWriter output) {
// Render処理を作り込む。
if (this.DisplayRawText) {
// 生テキストの表示
output.Write(this.Text);
}
else if (this.Hide) {
// 出力時に隠す(データ自体は保持)
output.Write("");
}
else {
// 通常通りの出力
base.Render(output);
}
}
***ToUpper, ToLowerカスタム プロパティの実装例(RenderCon...
以下は、カスタム プロパティによって、Renderメソッドにより...
/// <summary>
/// Visibleプロパティ、ページのトレースなどの
/// 制御を行い、ページにコントロールを表示する。
/// </summary>
/// <remarks>
/// このメソッドは、表示中にページによって自動的に呼び出...
/// カスタム コントロールの開発者はこのメソッドをオーバ...
/// </remarks>
public override void RenderControl(HtmlTextWriter output...
if (this.ToUpper || this.ToLower) {
// RenderControlにRenderの制御処理を作り込む。
// StringWriterの書き出し先のStringBuilderを生成
StringBuilder sb = new StringBuilder();
// StringWriterを使用するStringWriterを生成
StringWriter sw = new StringWriter(sb);
// 上記StringWriterを使用するHtmlTextWriterを生成
HtmlTextWriter htw = new HtmlTextWriter(sw);
// StringWriterを使用するHtmlTextWriterを指定し、Ren...
this.Render(htw);
// RenderメソッドでRenderされた、コントロールのHTMLを
// StringWriterに指定したStringBuilderから取得する。
string html = sb.ToString();
// HTMLの編集処理
if (this.ToUpper) {
html = html.ToUpper();
}
else if (this.ToLower)
{
html = html.ToLower();
}
else
{
// ここは通らない。
}
// ページにコントロールを表示
output.Write(html);
}
else {
// ベースのRenderControlを使用する。
base.RenderControl(output);
}
}
**コンストラクタ [#r24d7631]
コンストラクタについては自由な利用が可能である。
ここではスタイル関係のプロパティに初期値を設定。
/// <summary>コンストラクタ</summary>
/// <summary>コンストラクタでプロジェクトなどでの標準ス...
public WebCustLabel()
{
// 初期設定のプロパティ値を設定する。
// ※ デザインタイム・プロパティのほうが優先される。
this.Font.Size = 12;
this.ForeColor = System.Drawing.Color.Red;
this.Font.Name = "MS ゴシック";
}
***[[デザイナとコンストラクタのコードが干渉する問題>コン...
**カスタム サーバ コントロールのメタデータ属性 [#y50238c5]
http://msdn.microsoft.com/ja-jp/library/ms178658.aspx
*[[Windows Forms]] [#y005203a]
**クラス定義 [#c3ba9bb7]
以下は、ラベル コントロール(System.Windows.Forms.Label ...
namespace Ctrl
{
/// <summary>System.Windows.Forms.Labelのカスタム・コ...
[DefaultProperty("Text")]
public class WinCustLabel : Label
**プロパティ [#p5ebf934]
[[Windows Forms]]アプリケーションのカスタム コントロール...
/// <summary>文字列反転</summary>
private bool _Reverse = false;
/// <summary>テキストを反転するかどうかを示す。</summary>
[DefaultValue("false"),
Category("動作"),
Description("テキストを反転するかどうかを示します。")]
public bool Reverse {
set {
this._Reverse = value;
// 表示に影響を与えるプロパティの
// setterにはRefreshメソッドを仕込む。
this.Refresh();
}
get { return this._Reverse; }
}
***表示に影響を与えるプロパティのgetter [#naed4706]
[[Windows Forms]]アプリケーションのカスタム コントロール...
故に、[[Windows Forms]]アプリケーションのカスタム コント...
**イベント [#y4e45a5d]
***イベントハンドラの追加 [#e7f9ba82]
リッチクライアントである[[Windows Forms]]では[[ウィンドウ...
namespace Ctrl {
/// <summary>System.Windows.Forms.TextBoxのカスタム・...
[DefaultProperty("Text")]
public class WinCustTextBox : TextBox {
/// <summary>コンストラクタ</summary>
public WinCustTextBox() {
this.InitializeComponent();
}
/// <summary>初期化</summary>
private void InitializeComponent() {
this.SuspendLayout();
this.Enter += new System.EventHandler(this.WinCust...
this.Leave += new System.EventHandler(this.WinCust...
this.MouseDown += new System.Windows.Forms.MouseEv...
this.ResumeLayout(false);
}
/// <summary>MouseDown状態の確認用フラグ</summary>
private bool IsMouseDown = false;
/// <summary>マウスが入った</summary>
private void WinCustomTextBox_MouseDown(object sende...
this.IsMouseDown = true;
}
/// <summary>フォーカス</summary>
private void WinCustomTextBox_Enter(object sender, E...
if (!this.IsMouseDown) {
// MouseDown状態で無ければ全選択
this.SelectAll();
}
}
/// <summary>ロスト フォーカス</summary>
private void WinCustomTextBox_Leave(object sender, E...
this.IsMouseDown = false;
}
}
}
***カスタムイベント [#o0d0de2b]
カスタムイベントの作成方法
-方法 : カスタムのダブルクリック イベントを作成する~
http://msdn.microsoft.com/ja-jp/library/ms172533.aspx
-カスタムコントロール作成入門講座初級編 みかみんのプログ...
http://tech.junax.jp/custom-control-beginner/
--新規イベントの実装~
http://tech.junax.jp/custom-control-beginner/wfcb-new-eve...
**UIのカスタマイズ [#n4f5f75f]
オーナードロー(オーナー描画)なので難易度が高い。
-コントロールの描画を独自で行う方法。
-OnPaintメソッドをオーバーライドする。
***OnPaintメソッド [#ofb09ba5]
ここで出力されるHTMLのカスタマイズは、Render系メソッドの...
カスタム コントロールをControlクラスから派生させて[[スク...
それ以外の場合は、必要に応じて動作変更するようにして、動...
-参考
--方法 : カスタム イメージのボタン コントロールを作成する~
http://msdn.microsoft.com/ja-jp/library/ms172532.aspx
// Override the OnPaint method to draw the background im...
protected override void OnPaint(PaintEventArgs e)
{
if(this.pressed && this.pressedImage != null)
e.Graphics.DrawImage(this.pressedImage, 0, 0);
else
e.Graphics.DrawImage(this.backgroundImage, 0, 0);
// Draw the text if there is any.if(this.Text.Length...
{
SizeF size = e.Graphics.MeasureString(this.Text,...
// Center the text inside the client area of the...
e.Graphics.DrawString(this.Text,
this.Font,
new SolidBrush(this.ForeColor),
(this.ClientSize.Width - size.Width) / 2,
(this.ClientSize.Height - size.Height) / 2);
}
// Draw a border around the outside of the // contro...
e.Graphics.DrawRectangle(new Pen(Color.Black), 0, 0,
this.ClientSize.Width - 1, this.ClientSize.Heigh...
base.OnPaint(e);
}
--方法 : オーナー描画リスト ボックスを作成する~
http://msdn.microsoft.com/ja-jp/library/ms229679.aspx
・・・
***クリッピング [#z51ef61e]
部分描画により、性能を向上させることができる。
-C#ゲームプログラミング-2.12 クリッピング - WisdomSoft~
http://www.wisdomsoft.jp/496.html
***オーナー描画をサポートするコントロール [#j1d99d2c]
-組み込みのオーナー描画サポートを備えたコントロール~
https://msdn.microsoft.com/ja-jp/library/yyfab68k.aspx
>オーナー描画によるカスタマイズを含んだ再利用可能なコント...
**コンストラクタ [#d7f269e0]
コンストラクタについては自由な利用が可能である。
***[[デザイナとコンストラクタのコードが干渉する問題>コン...
*その他 [#z62b31ba]
**コントロールの基本クラスを継承したスクラッチ開発 [#rcc4...
下記のコントロールの基本クラスから継承し、カスタム コント...
-[[ASP.NET Web Forms]]~
System.Web.UI.WebControls.WebControl~
https://msdn.microsoft.com/ja-jp/library/system.web.ui.we...
-[[Windows Forms]]~
System.Windows.Forms.Control~
https://msdn.microsoft.com/ja-jp/library/system.windows.f...
**メソッド・プロパティをオーバーライドできない場合 [#aaba...
派生クラスでオーバーライドが可能なように、virtual / abstr...
例えば、newキーワードによりTextプロパティを上書きし、Rend...
このようなコントロールは、当該プロパティのカスタマイズを...
*参考 [#d6212364]
**Webカスタム コントロールの開発 [#u1cb43bd]
Webカスタム コントロール開発に関する参考資料
-MSDN > Visual Web Developer > ASP.NETカスタム サーバ コ...
http://msdn.microsoft.com/ja-jp/library/zt27tfhy.aspx
--チュートリアル : カスタム サーバ コントロールの開発と...
http://msdn.microsoft.com/ja-jp/library/yhzc935f.aspx
--方法 : Visual StudioでカスタムASP.NETサーバ コントロー...
http://msdn.microsoft.com/ja-jp/library/ms366537.aspx
--カスタム サーバ コントロールのメタデータ属性~
http://msdn.microsoft.com/ja-jp/library/ms178658.aspx
--サーバ コントロールの単純なプロパティとサブプロパティ~
http://msdn.microsoft.com/ja-jp/library/ms178648.aspx
--Webコントロールのレンダリングの例~
http://msdn.microsoft.com/ja-jp/library/f820d25y.aspx
--カスタム サーバ コントロールの例のビルド~
http://msdn.microsoft.com/ja-jp/library/az5kdaz0.aspx
--(状態管理)
---コントロールの状態とビューステートの例~
http://msdn.microsoft.com/ja-jp/library/1whwt1k7.aspx
---サーバ コントロールのカスタム状態管理~
http://msdn.microsoft.com/ja-jp/library/ms178650.aspx
---カスタム型の状態管理の例~
http://msdn.microsoft.com/ja-jp/library/ms178652.aspx
--(コレクション プロパティ、子コントロール)
---サーバ コントロールのコレクション プロパティ~
http://msdn.microsoft.com/ja-jp/library/ms178654.aspx
---複合Webコントロールの例~
http://msdn.microsoft.com/ja-jp/library/3257x3ea.aspx
---子コントロールの型指定されたスタイルの例~
http://msdn.microsoft.com/ja-jp/library/ms178656.aspx
--(テンプレート、データ バインド)
--テンプレート サーバ コントロールの例~
http://msdn.microsoft.com/ja-jp/library/ms178657.aspx
--ASP.NET1.1用カスタム データ バインドWebサーバ コントロ...
http://msdn.microsoft.com/ja-jp/library/ms366538.aspx
--ASP.NET2.0用カスタム データ バインドWebサーバ コントロ...
http://msdn.microsoft.com/ja-jp/library/ms366539.aspx
--カスタム サーバ コントロールのセキュリティ保護~
http://msdn.microsoft.com/ja-jp/library/ms366542.aspx
-CodeZine > 改行やリンクをタグに自動置換するコントロール...
http://codezine.jp/article/detail/402
-japan.internet.comデベロッパー > Webカスタム コントロー...
http://japan.internet.com/developer/20051108/26.html
**[[Windows Forms]]カスタム コントロールの開発 [#zb628548]
[[Windows Forms]]カスタム コントロール開発に関する参考資料
-MSDN > アプリケーション開発 > Windowsフォーム コントロー...
http://msdn.microsoft.com/ja-jp/library/4yf3whkx.aspx
--方法 : 数値テキスト ボックスを作成する~
http://msdn.microsoft.com/ja-jp/library/ms229644.aspx
--方法 : カスタム イメージのボタン コントロールを作成する~
http://msdn.microsoft.com/ja-jp/library/ms172532.aspx
--方法 : カスタムのダブルクリック イベントを作成する~
http://msdn.microsoft.com/ja-jp/library/ms172533.aspx
--方法 : フォームの内容をスクロールする~
http://msdn.microsoft.com/ja-jp/library/ms172530.aspx
--(スマート デバイスPocket PCプロジェクト)
---方法 : グラデーションの塗りつぶしを表示する(スマート...
http://msdn.microsoft.com/ja-jp/library/ms229655.aspx
---方法 : ネイティブのコールバックを使用してボタンをサブ...
http://msdn.microsoft.com/ja-jp/library/ms229661.aspx
--(.NET Compact Framework)
---方法 : ListViewのアイテムを並べ替える~
http://msdn.microsoft.com/ja-jp/library/ms229643.aspx
---方法 : ネイティブのコールバックを使用してTreeViewをサ...
http://msdn.microsoft.com/ja-jp/library/ms229669.aspx
---方法 : オーナー描画リスト ボックスを作成する~
http://msdn.microsoft.com/ja-jp/library/ms229679.aspx
---方法 : OnEnter機能を作成する~
http://msdn.microsoft.com/ja-jp/library/ms229686.aspx
-カスタムコントロール作成入門講座初級編 みかみんのプログ...
http://tech.junax.jp/custom-control-beginner/
--フォームと継承~
http://tech.junax.jp/custom-control-beginner/wfcb-form-in...
--作成環境の準備~
http://tech.junax.jp/custom-control-beginner/vs-prepare/
--初めてのカスタムコントロール~
http://tech.junax.jp/custom-control-beginner/wfcb-first-c...
--新規プロパティの実装~
http://tech.junax.jp/custom-control-beginner/wfcb-new-pro...
--新規イベントの実装~
http://tech.junax.jp/custom-control-beginner/wfcb-new-eve...
**PropertyGridの活用 [#ae470ca6]
PropertyGridコントロールに関する参考資料
-DOBON.NET > プログラミング道 > .NET Tips > コントロール ...
http://dobon.net/vb/dotnet/control/propertygrid.html
-MSDN > 技術資料 >
--.NET FrameworkのPropertyGridコントロールの高度な活用~
http://msdn.microsoft.com/ja-jp/library/aa302326.aspx
--Visual Studio .NETプロパティ ブラウザによるコンポーネン...
http://msdn.microsoft.com/ja-jp/library/aa302334.aspx
**Open棟梁のカスタムコントロール [#pb2c889d]
-[[ASP.NET Web Forms]]のカスタムコントロール~
https://github.com/OpenTouryoProject/OpenTouryo/tree/deve...
-[[Windows Forms]]のカスタムコントロール~
https://github.com/OpenTouryoProject/OpenTouryo/tree/deve...
----
Tags: [[:.NET開発]], [[:UIサブシステム]], [[:Windows Form...
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>.NET開発]]
--[[Windows Forms]]
--[[ASP.NET Web Forms]]
* 目次 [#xe7a23df]
#contents
*概要 [#a6c161e7]
.NET Frameworkでは、画面の開発に必要となるコントロールが...
.NETでは、これらのコントロールの動作をカスタマイズするこ...
(例えば、自動編集処理、自動入力チェック処理、サニタイジ...
ここでは、この.NETコントロール([[ASP.NET Web Forms]], [[...
*[[ASP.NET Web Forms]] [#s5af500d]
[[ASP.NET Web Forms]]で使用するコントロールの特徴は、Web...
-表示はHTMLにより行われるのでカスタマイズしやすい。
-ただし、状態の持ち回りについて考慮する必要がある。
という点である。
**クラス定義 [#t4162e0b]
以下は、ラベル コントロール(System.Web.UI.WebControls.La...
[assembly: TagPrefix("Ctrl", "my_wcc")]
namespace Ctrl {
/// <summary>System.Web.UI.Labelのカスタム・コントロー...
[DefaultProperty("Text"),
ToolboxData("<{0}:WebCustLabel runat=server></{0}:WebC...
public class WebCustLabel : Label
このクラス定義に含まれる「[[ToolboxData>http://msdn.micro...
**プロパティ [#cf8f9890]
***カスタム プロパティの追加 [#w0e6cbab]
本項ではカスタム プロパティの追加方法について説明する。~
カスタム プロパティを追加する際は、通常通りにプロパティ ...
/// <summary>コントロール内のテキストを反転するかどうか...
[DefaultValue("false"),
Category("動作"),
Description("コントロール内のテキストを反転するかどうか...
public bool Reverse {
set { this.ViewState["Reverse"] = value; }
get {
return (this.ViewState["Reverse"] == null) ?
false : (bool)this.ViewState["Reverse"];
}
}
-ただし、[[ASP.NET Web Forms]]アプリケーションにおいてコ...
-また、ここでも同様にオプションとして、「[[DefaultValue>h...
|メンバ名|説明|デフォルト値|h
|DefaultValue|デフォルト値を表す。|-|
|Browsable|プロパティをPropertyGridに表示するかどうかを指...
|Category|プロパティをまとめるカテゴリ。&br;カテゴリには...
|Description|プロパティの設定を行う際の参考としてProperty...
***既存プロパティのカスタマイズ [#s2db5d89]
-本項では既存プロパティのカスタマイズ(オーバーライド)方...
-また、何からの処理を追加した後、「base.オーバーライドし...
***Label.Textのカスタマイズ [#u4099ba9]
以下は、Textプロパティをオーバーライドしカスタム動作を実...
/// <summary>Textプロパティに機能を追加実装する。</summa...
public override string Text {
// ベースのプロパティを使用する。
set {
string temp = value;
// カスタム動作の処理を実装する。
base.Text = temp;
}
get {
string temp = base.Text;
// カスタム動作の処理を実装する。
return temp;
}
}
***TextBox.Enabled, ReadOnlyのカスタマイズ [#lcd25c63]
-なお、以下は、テキストボックス コントロール(System.Web....
-ここでは、Enabledプロパティのsetterメソッド内部で、実際...
-このカスタマイズにより、Enabledプロパティの挙動をReadOnl...
/// <summary>活性・非活性を、Enabledから、ReadOnlyに変更...
public override bool Enabled {
set {
this.ReadOnly = !value;
}
// getは親のEnabledのgetを使用
}
また、背景色をグレーに変更するにあたって、元の背景色のバ...
/// <summary>ReadOnlyプロパティに背景変更処理を追加する...
public override bool ReadOnly {
// ベースのプロパティを使用する。
set {
base.ReadOnly = value;
// 背景変更
if (base.ReadOnly) {
this.ViewState["bkBgColor"] = this.BackColor;
this.BackColor = System.Drawing.Color.LightGray;
}
else {
this.BackColor =
(this.ViewState["bkBgColor"] == null)
? this.BackColor : (System.Drawing.Color)this....
}
}
get {
return base.ReadOnly;
}
}
**UIのカスタマイズ [#jc51310c]
[[ASP.NET Web Forms]]で使用するコントロールは、表示の制御...
***Render系メソッド [#y4342c87]
ここで出力されるHTMLのカスタマイズは、Render系メソッドの...
カスタム コントロールをControlクラスから派生させて[[スク...
それ以外の場合は、必要に応じて動作変更するようにして、動...
***[[HtmlTextWriterクラス>http://msdn.microsoft.com/ja-jp...
Render系メソッドにおいてHTMLを描画するには、引数に渡され...
-[[RenderBeginTagメソッド>http://msdn.microsoft.com/ja-jp...
-[[WriteFullBeginTagメソッド>http://msdn.microsoft.com/ja...
-[[Writeメソッド>http://msdn.microsoft.com/ja-jp/library/...
-[[RenderEndTagメソッド>http://msdn.microsoft.com/ja-jp/l...
-[[WriteEndTagメソッド>http://msdn.microsoft.com/ja-jp/li...
などがある。
余談となるが、HtmlTextWriterは TextWriterのDecoratorとし...
***[[System.Web.UI.Control.Renderメソッド>http://msdn.mic...
Renderメソッドには、必要に応じてHTML描画コードをオーバー...
RenderメソッドのHTML描画処理は、更に、以下の3つのメソッド...
-[[System.Web.UI.WebControls.WebControl.RenderBeginTagメ...
-[[System.Web.UI.WebControls.WebControl.RenderContentsメ...
-[[System.Web.UI.WebControls.WebControl.RenderEndTagメソ...
例えば、次のような実装を行うと、コントロールのHTML出力と...
/// <summary>RenderBeginTagのテスト</summary>
public override void RenderBeginTag(HtmlTextWriter outpu...
output.Write("<test>");
}
/// <summary>RenderContentsのテスト</summary>
protected override void RenderContents(HtmlTextWriter ou...
output.Write("test");
}
/// <summary>RenderEndTagのテスト</summary>
public override void RenderEndTag(HtmlTextWriter output) {
output.Write("</test>");
}
***[[System.Web.UI.Control.RenderControlメソッド>http://m...
RenderControlメソッドは、上記のRenderメソッドの制御コード...
***DisplayRawTextカスタム プロパティの実装例(Render) [#...
以下は、カスタム プロパティによって、HTMLの描画処理を変更...
/// <summary>
/// Renderメソッドは、
/// ・RenderBeginTag(開始のタグ)
/// ・RenderContents(中間の部分)
/// ・RenderEndTag(終了のタグ)
/// の各メソッドをこの順に呼び出して、コントロールをクラ...
/// </summary>
/// <remarks>
/// このメソッドは、表示中にページによって自動的に呼び出...
/// また、このメソッドは、主にコントロールの開発者によっ...
/// </remarks>
protected override void Render(HtmlTextWriter output) {
// Render処理を作り込む。
if (this.DisplayRawText) {
// 生テキストの表示
output.Write(this.Text);
}
else if (this.Hide) {
// 出力時に隠す(データ自体は保持)
output.Write("");
}
else {
// 通常通りの出力
base.Render(output);
}
}
***ToUpper, ToLowerカスタム プロパティの実装例(RenderCon...
以下は、カスタム プロパティによって、Renderメソッドにより...
/// <summary>
/// Visibleプロパティ、ページのトレースなどの
/// 制御を行い、ページにコントロールを表示する。
/// </summary>
/// <remarks>
/// このメソッドは、表示中にページによって自動的に呼び出...
/// カスタム コントロールの開発者はこのメソッドをオーバ...
/// </remarks>
public override void RenderControl(HtmlTextWriter output...
if (this.ToUpper || this.ToLower) {
// RenderControlにRenderの制御処理を作り込む。
// StringWriterの書き出し先のStringBuilderを生成
StringBuilder sb = new StringBuilder();
// StringWriterを使用するStringWriterを生成
StringWriter sw = new StringWriter(sb);
// 上記StringWriterを使用するHtmlTextWriterを生成
HtmlTextWriter htw = new HtmlTextWriter(sw);
// StringWriterを使用するHtmlTextWriterを指定し、Ren...
this.Render(htw);
// RenderメソッドでRenderされた、コントロールのHTMLを
// StringWriterに指定したStringBuilderから取得する。
string html = sb.ToString();
// HTMLの編集処理
if (this.ToUpper) {
html = html.ToUpper();
}
else if (this.ToLower)
{
html = html.ToLower();
}
else
{
// ここは通らない。
}
// ページにコントロールを表示
output.Write(html);
}
else {
// ベースのRenderControlを使用する。
base.RenderControl(output);
}
}
**コンストラクタ [#r24d7631]
コンストラクタについては自由な利用が可能である。
ここではスタイル関係のプロパティに初期値を設定。
/// <summary>コンストラクタ</summary>
/// <summary>コンストラクタでプロジェクトなどでの標準ス...
public WebCustLabel()
{
// 初期設定のプロパティ値を設定する。
// ※ デザインタイム・プロパティのほうが優先される。
this.Font.Size = 12;
this.ForeColor = System.Drawing.Color.Red;
this.Font.Name = "MS ゴシック";
}
***[[デザイナとコンストラクタのコードが干渉する問題>コン...
**カスタム サーバ コントロールのメタデータ属性 [#y50238c5]
http://msdn.microsoft.com/ja-jp/library/ms178658.aspx
*[[Windows Forms]] [#y005203a]
**クラス定義 [#c3ba9bb7]
以下は、ラベル コントロール(System.Windows.Forms.Label ...
namespace Ctrl
{
/// <summary>System.Windows.Forms.Labelのカスタム・コ...
[DefaultProperty("Text")]
public class WinCustLabel : Label
**プロパティ [#p5ebf934]
[[Windows Forms]]アプリケーションのカスタム コントロール...
/// <summary>文字列反転</summary>
private bool _Reverse = false;
/// <summary>テキストを反転するかどうかを示す。</summary>
[DefaultValue("false"),
Category("動作"),
Description("テキストを反転するかどうかを示します。")]
public bool Reverse {
set {
this._Reverse = value;
// 表示に影響を与えるプロパティの
// setterにはRefreshメソッドを仕込む。
this.Refresh();
}
get { return this._Reverse; }
}
***表示に影響を与えるプロパティのgetter [#naed4706]
[[Windows Forms]]アプリケーションのカスタム コントロール...
故に、[[Windows Forms]]アプリケーションのカスタム コント...
**イベント [#y4e45a5d]
***イベントハンドラの追加 [#e7f9ba82]
リッチクライアントである[[Windows Forms]]では[[ウィンドウ...
namespace Ctrl {
/// <summary>System.Windows.Forms.TextBoxのカスタム・...
[DefaultProperty("Text")]
public class WinCustTextBox : TextBox {
/// <summary>コンストラクタ</summary>
public WinCustTextBox() {
this.InitializeComponent();
}
/// <summary>初期化</summary>
private void InitializeComponent() {
this.SuspendLayout();
this.Enter += new System.EventHandler(this.WinCust...
this.Leave += new System.EventHandler(this.WinCust...
this.MouseDown += new System.Windows.Forms.MouseEv...
this.ResumeLayout(false);
}
/// <summary>MouseDown状態の確認用フラグ</summary>
private bool IsMouseDown = false;
/// <summary>マウスが入った</summary>
private void WinCustomTextBox_MouseDown(object sende...
this.IsMouseDown = true;
}
/// <summary>フォーカス</summary>
private void WinCustomTextBox_Enter(object sender, E...
if (!this.IsMouseDown) {
// MouseDown状態で無ければ全選択
this.SelectAll();
}
}
/// <summary>ロスト フォーカス</summary>
private void WinCustomTextBox_Leave(object sender, E...
this.IsMouseDown = false;
}
}
}
***カスタムイベント [#o0d0de2b]
カスタムイベントの作成方法
-方法 : カスタムのダブルクリック イベントを作成する~
http://msdn.microsoft.com/ja-jp/library/ms172533.aspx
-カスタムコントロール作成入門講座初級編 みかみんのプログ...
http://tech.junax.jp/custom-control-beginner/
--新規イベントの実装~
http://tech.junax.jp/custom-control-beginner/wfcb-new-eve...
**UIのカスタマイズ [#n4f5f75f]
オーナードロー(オーナー描画)なので難易度が高い。
-コントロールの描画を独自で行う方法。
-OnPaintメソッドをオーバーライドする。
***OnPaintメソッド [#ofb09ba5]
ここで出力されるHTMLのカスタマイズは、Render系メソッドの...
カスタム コントロールをControlクラスから派生させて[[スク...
それ以外の場合は、必要に応じて動作変更するようにして、動...
-参考
--方法 : カスタム イメージのボタン コントロールを作成する~
http://msdn.microsoft.com/ja-jp/library/ms172532.aspx
// Override the OnPaint method to draw the background im...
protected override void OnPaint(PaintEventArgs e)
{
if(this.pressed && this.pressedImage != null)
e.Graphics.DrawImage(this.pressedImage, 0, 0);
else
e.Graphics.DrawImage(this.backgroundImage, 0, 0);
// Draw the text if there is any.if(this.Text.Length...
{
SizeF size = e.Graphics.MeasureString(this.Text,...
// Center the text inside the client area of the...
e.Graphics.DrawString(this.Text,
this.Font,
new SolidBrush(this.ForeColor),
(this.ClientSize.Width - size.Width) / 2,
(this.ClientSize.Height - size.Height) / 2);
}
// Draw a border around the outside of the // contro...
e.Graphics.DrawRectangle(new Pen(Color.Black), 0, 0,
this.ClientSize.Width - 1, this.ClientSize.Heigh...
base.OnPaint(e);
}
--方法 : オーナー描画リスト ボックスを作成する~
http://msdn.microsoft.com/ja-jp/library/ms229679.aspx
・・・
***クリッピング [#z51ef61e]
部分描画により、性能を向上させることができる。
-C#ゲームプログラミング-2.12 クリッピング - WisdomSoft~
http://www.wisdomsoft.jp/496.html
***オーナー描画をサポートするコントロール [#j1d99d2c]
-組み込みのオーナー描画サポートを備えたコントロール~
https://msdn.microsoft.com/ja-jp/library/yyfab68k.aspx
>オーナー描画によるカスタマイズを含んだ再利用可能なコント...
**コンストラクタ [#d7f269e0]
コンストラクタについては自由な利用が可能である。
***[[デザイナとコンストラクタのコードが干渉する問題>コン...
*その他 [#z62b31ba]
**コントロールの基本クラスを継承したスクラッチ開発 [#rcc4...
下記のコントロールの基本クラスから継承し、カスタム コント...
-[[ASP.NET Web Forms]]~
System.Web.UI.WebControls.WebControl~
https://msdn.microsoft.com/ja-jp/library/system.web.ui.we...
-[[Windows Forms]]~
System.Windows.Forms.Control~
https://msdn.microsoft.com/ja-jp/library/system.windows.f...
**メソッド・プロパティをオーバーライドできない場合 [#aaba...
派生クラスでオーバーライドが可能なように、virtual / abstr...
例えば、newキーワードによりTextプロパティを上書きし、Rend...
このようなコントロールは、当該プロパティのカスタマイズを...
*参考 [#d6212364]
**Webカスタム コントロールの開発 [#u1cb43bd]
Webカスタム コントロール開発に関する参考資料
-MSDN > Visual Web Developer > ASP.NETカスタム サーバ コ...
http://msdn.microsoft.com/ja-jp/library/zt27tfhy.aspx
--チュートリアル : カスタム サーバ コントロールの開発と...
http://msdn.microsoft.com/ja-jp/library/yhzc935f.aspx
--方法 : Visual StudioでカスタムASP.NETサーバ コントロー...
http://msdn.microsoft.com/ja-jp/library/ms366537.aspx
--カスタム サーバ コントロールのメタデータ属性~
http://msdn.microsoft.com/ja-jp/library/ms178658.aspx
--サーバ コントロールの単純なプロパティとサブプロパティ~
http://msdn.microsoft.com/ja-jp/library/ms178648.aspx
--Webコントロールのレンダリングの例~
http://msdn.microsoft.com/ja-jp/library/f820d25y.aspx
--カスタム サーバ コントロールの例のビルド~
http://msdn.microsoft.com/ja-jp/library/az5kdaz0.aspx
--(状態管理)
---コントロールの状態とビューステートの例~
http://msdn.microsoft.com/ja-jp/library/1whwt1k7.aspx
---サーバ コントロールのカスタム状態管理~
http://msdn.microsoft.com/ja-jp/library/ms178650.aspx
---カスタム型の状態管理の例~
http://msdn.microsoft.com/ja-jp/library/ms178652.aspx
--(コレクション プロパティ、子コントロール)
---サーバ コントロールのコレクション プロパティ~
http://msdn.microsoft.com/ja-jp/library/ms178654.aspx
---複合Webコントロールの例~
http://msdn.microsoft.com/ja-jp/library/3257x3ea.aspx
---子コントロールの型指定されたスタイルの例~
http://msdn.microsoft.com/ja-jp/library/ms178656.aspx
--(テンプレート、データ バインド)
--テンプレート サーバ コントロールの例~
http://msdn.microsoft.com/ja-jp/library/ms178657.aspx
--ASP.NET1.1用カスタム データ バインドWebサーバ コントロ...
http://msdn.microsoft.com/ja-jp/library/ms366538.aspx
--ASP.NET2.0用カスタム データ バインドWebサーバ コントロ...
http://msdn.microsoft.com/ja-jp/library/ms366539.aspx
--カスタム サーバ コントロールのセキュリティ保護~
http://msdn.microsoft.com/ja-jp/library/ms366542.aspx
-CodeZine > 改行やリンクをタグに自動置換するコントロール...
http://codezine.jp/article/detail/402
-japan.internet.comデベロッパー > Webカスタム コントロー...
http://japan.internet.com/developer/20051108/26.html
**[[Windows Forms]]カスタム コントロールの開発 [#zb628548]
[[Windows Forms]]カスタム コントロール開発に関する参考資料
-MSDN > アプリケーション開発 > Windowsフォーム コントロー...
http://msdn.microsoft.com/ja-jp/library/4yf3whkx.aspx
--方法 : 数値テキスト ボックスを作成する~
http://msdn.microsoft.com/ja-jp/library/ms229644.aspx
--方法 : カスタム イメージのボタン コントロールを作成する~
http://msdn.microsoft.com/ja-jp/library/ms172532.aspx
--方法 : カスタムのダブルクリック イベントを作成する~
http://msdn.microsoft.com/ja-jp/library/ms172533.aspx
--方法 : フォームの内容をスクロールする~
http://msdn.microsoft.com/ja-jp/library/ms172530.aspx
--(スマート デバイスPocket PCプロジェクト)
---方法 : グラデーションの塗りつぶしを表示する(スマート...
http://msdn.microsoft.com/ja-jp/library/ms229655.aspx
---方法 : ネイティブのコールバックを使用してボタンをサブ...
http://msdn.microsoft.com/ja-jp/library/ms229661.aspx
--(.NET Compact Framework)
---方法 : ListViewのアイテムを並べ替える~
http://msdn.microsoft.com/ja-jp/library/ms229643.aspx
---方法 : ネイティブのコールバックを使用してTreeViewをサ...
http://msdn.microsoft.com/ja-jp/library/ms229669.aspx
---方法 : オーナー描画リスト ボックスを作成する~
http://msdn.microsoft.com/ja-jp/library/ms229679.aspx
---方法 : OnEnter機能を作成する~
http://msdn.microsoft.com/ja-jp/library/ms229686.aspx
-カスタムコントロール作成入門講座初級編 みかみんのプログ...
http://tech.junax.jp/custom-control-beginner/
--フォームと継承~
http://tech.junax.jp/custom-control-beginner/wfcb-form-in...
--作成環境の準備~
http://tech.junax.jp/custom-control-beginner/vs-prepare/
--初めてのカスタムコントロール~
http://tech.junax.jp/custom-control-beginner/wfcb-first-c...
--新規プロパティの実装~
http://tech.junax.jp/custom-control-beginner/wfcb-new-pro...
--新規イベントの実装~
http://tech.junax.jp/custom-control-beginner/wfcb-new-eve...
**PropertyGridの活用 [#ae470ca6]
PropertyGridコントロールに関する参考資料
-DOBON.NET > プログラミング道 > .NET Tips > コントロール ...
http://dobon.net/vb/dotnet/control/propertygrid.html
-MSDN > 技術資料 >
--.NET FrameworkのPropertyGridコントロールの高度な活用~
http://msdn.microsoft.com/ja-jp/library/aa302326.aspx
--Visual Studio .NETプロパティ ブラウザによるコンポーネン...
http://msdn.microsoft.com/ja-jp/library/aa302334.aspx
**Open棟梁のカスタムコントロール [#pb2c889d]
-[[ASP.NET Web Forms]]のカスタムコントロール~
https://github.com/OpenTouryoProject/OpenTouryo/tree/deve...
-[[Windows Forms]]のカスタムコントロール~
https://github.com/OpenTouryoProject/OpenTouryo/tree/deve...
----
Tags: [[:.NET開発]], [[:UIサブシステム]], [[:Windows Form...
ページ名: