カスタムコントロールにクライアントサイドで動作するイベントを設定する方法

 カスタムコントロールにクライアントサイドで動作するイベントを設定する方法には、カスタムコントロールの「Renderr()」メソッドをオーバーライドして、「Attributes」プロパティにイベントを追加登録します。
【使い方】

例:TextBox が Focus されたときに文字色/背景色を切替えるイベントを設定する。
// currentForeColor, currentBackColor は、カレントカラー

/// <summary>
/// クライアントに表示される内容を書き込むメソッド。
/// </summary>
protected override void Render( System.Web.UI.HtmlTextWriter writer )
{
    //Debug.WriteLine("Control Render : Start");
        
    // カレントカラーが設定された場合、クライアントサイドで呼び出すイベントを設定する
    if ( !currentForeColor.IsEmpty || !currentBackColor.IsEmpty )
    {
        // スクリプトを実行するプログラムを作成します。
        // Focus時のイベント呼び出し定義
        string scriptFocusInvoke = string.Format("JavaScript:OnTextBoxFocusChanged(this,'#{0:X}','#{1:X}');"
                                    , currentForeColor.ToArgb() & 0x00ffffff, currentBackColor.ToArgb() & 0x00ffffff );

        // Blur時のイベント呼び出し定義
        string scriptBlurInvoke = string.Format("JavaScript:OnTextBoxFocusChanged(this,'#{0:X}','#{1:X}');"
                                    , this.ForeColor.ToArgb() & 0x00ffffff, this.BackColor.ToArgb() & 0x00ffffff );

        // イベント呼び出しを設定する
        this.Attributes.Add("onfocus", scriptFocusInvoke);
        this.Attributes.Add("onblur", scriptBlurInvoke);
    }

    // 元のメソッドを呼び出す
    base.Render( writer );

TextBox が Focus されたときのイベントスクリプトの設定例
/// <summary>
/// JavaScriptを出力するメソッド。
/// </summary>
protected override void OnPreRender( System.EventArgs e )
{
    // スクリプトを作成します。
    string str =
        "<script language=\"javascript\"><!--{TextBox}\n"
        + "    function OnTextBoxFocusChanged(txtBox, foreColor, backColor) {\n"
        + "        if ( foreColor != null && foreColor != \"#0\" ){\n"
        + "            txtBox.style.color=foreColor;\n"
        + "        }else{\n"
        + "            txtBox.style.color=\"\";\n"
        + "        }\n"
        + "        if ( backColor != null && backColor != \"#0\" ){\n"
        + "            txtBox.style.backgroundColor=backColor;\n"
        + "        }else{\n"
        + "            txtBox.style.backgroundColor=\"\";\n"
        + "        }\n"
        + "    }\n"
        + "    --></script>\n";

    // ページにスクリプトを登録します。
    Page.RegisterClientScriptBlock( "OnTextBoxFocusChanged", str );
}
【注意】
戻る