<input name="txtFirstName" type="text" id="txtFirstName" onfocus= "this.className = 'ActiveTextBox';" onblur="this.className = '';" /> |
ここで、コントロールがフォーカスを持っていない場合には、特定のスタイルクラスを持たないという点に注意してほしい。標準のスタイルが適用される。
このテクニックは、フォームが多くのフィールドを含んでいる場合に高速となるだけでなく、メンテナンスが容易になるメリットがある。ASP.NETアプリケーションを再コンパイルすることなく、異なるCSSを用意することで、あとから簡単にフォーカススタイルを変更できるためだ。――Marco Bellinaso
SetInputControlClassNameメソッドは、コントロールがフォーカスを得たり失ったりした場合に、それぞれに対応するCSSクラスを適用するクライアントサイドのJavaScriptを生成する。
リスト4■VB.NET、C#において、CSSを使ってスタイルを変更する |
' VB.NET Sub SetInputControlClassName(ByVal ctl As _ WebControl, ByVal className As String, _ ByVal focusClassName As String) Dim jsOnFocus As String = String.Format( _ "this.className = '{0}';", focusClassName) Dim jsOnBlur As String = String.Format( _ "this.className = '{0}';", className) ctl.Attributes.Add("onfocus", jsOnFocus) ctl.Attributes.Add("onblur", jsOnBlur) End Sub Sub SetAllInputControlsClassName(ByVal parent _ As Control, ByVal className As String, _ ByVal focusClassName As String) For Each ctl As Control In parent.Controls If TypeOf ctl Is TextBox OrElse _ TypeOf ctl Is ListBox OrElse TypeOf ctl Is DropDownList Then SetInputControlClassName( _ DirectCast(ctl, WebControl), _ className, focusClassName) Else SetAllInputControlsClassName(ctl, _ className, focusClassName) End If Next End Sub // C# void SetInputControlClassName(WebControl ctl, string className, string focusClassName) { string jsOnFocus = String.Format( "this.className = '{0}';", focusClassName); string jsOnBlur = String.Format( "this.className = '{0}';", className); ctl.Attributes.Add("onfocus", jsOnFocus); ctl.Attributes.Add("onblur", jsOnBlur); } void SetAllInputControlsClassName(Control parent, string className, string focusClassName) { foreach (Control ctl in parent.Controls) { if (ctl is TextBox || ctl is ListBox || ctl is DropDownList) { SetInputControlClassName( ctl as WebControl, className, focusClassName); } else { SetAllInputControlsClassName(ctl, className, focusClassName); } } } |
■著者について 【Francesco Balena】同氏は、「Programming Microsoft Visual Basic 6」や「Programming Microsoft Visual Basic .NET 2003」(ともにMicrosoft Press刊)などのベストセラーをもつ著者。イタリアのMSDN地域事務局長であり、開発者向けのカンファレンスにおいて、頻繁に講演している。また、www.vb2themax.com と新しい2TheMaxファミリーサイトの創立者でもある。 【Marco Bellinaso】同氏は、「ASP.NET Website Programming」「Fast Track ASP.NET」「Visual C#.NET:A Guide for VB6 Developers」(ともにWrox刊)の共著者。www.vb2themax.comやwww.dotnet2themax.com、www.cs2themax.comなどの人気サイトを含む2TheMaxファミリーサイトの編集長でもある。Blogはこちら。 |
日本語訳:大澤文孝
© Copyright 2001-2005 Fawcette Technical Publications