特集
» 2004年12月07日 14時05分 公開

Visual Studio Magazine:特集:正規表現によるテキストファイルパース (8/8)

[Francesco Balena, Marco Bellinaso,FTPOnline]
前のページへ 1|2|3|4|5|6|7|8       
<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はこちら

日本語訳:大澤文孝

前のページへ 1|2|3|4|5|6|7|8       

© Copyright 2001-2005 Fawcette Technical Publications

注目のテーマ