iPodを購入してから、家で音楽を聴く機会が減った。
同居し始めてからという理由もあるかも。
そうなると、たいてい通勤時間に聴いているわけで、どうしてもリラックスしては聴けない。
常に緊張状態にあるような感覚にとらわれる。
それは、インナーイヤホンを利用してるからなのかもしれない。
音が近い。
というか、全てが音に塞がれる。
そんな状態になる時がある。
ブルーな時に、そんな空気がやってくると辛いものがある。
まぁ・・・。だからといってやめないのだけれども・・・。
ASP.NETで、WebフォームであるPanelを利用した時は、PanelのEnabled=falseでPanelが保有するコントロールも使用不可になる。
だが、Tableをサーバサイドで利用するようにして、Disabled=Trueにしても子コントロールは使用不可表示になるが使用できてしまう。
このロジックはその問題を回避する。
001 Public Shared Sub SetControlEnabled(ByVal Parent As Control, ByVal IsEnabled As Boolean) 002 Dim objControl As Control 003 004 SetEnabled(Parent, IsEnabled) 005 006 For Each objControl In Parent.Controls 007 If objControl.Controls.Count > 0 Then 008 SetControlEnabled(objControl, IsEnabled) 009 Else 010 SetEnabled(objControl, IsEnabled) 011 End If 012 Next 013 End Sub 014 015 Private Shared Sub SetEnabled(ByVal objControl As Control, ByVal IsEnabled As Boolean) 016 Dim objProperty As System.Reflection.PropertyInfo 017 objProperty = objControl.GetType().GetProperty("Disabled") 018 If Not objProperty Is Nothing Then 019 objProperty.SetValue(objControl, (Not IsEnabled), Nothing) 020 Else 021 objProperty = objControl.GetType().GetProperty("Enabled") 022 If Not objProperty Is Nothing Then 023 objProperty.SetValue(objControl, (IsEnabled), Nothing) 024 End If 025 End If 026 027 End Sub 028
コントロールが所有するコレクションから指定した型のコントロール群を取得するロジックです。
Parentにコントロール群を所有するコントロールを渡し,typeに取得したいコントロールの型情報を渡します。
戻り値は、取得した結果でObject配列になっています。
ちなみに、VB.NETで記述してあります。
001 Public Shared Function GetControls(ByVal Parent As Control, ByVal type As System.Type) As Object() 002 Dim objControl As Control 003 Dim tmpControl As Control 004 Dim objList As New Collections.Stack 005 Dim objControls() As Object 006 007 '検索 008 For Each objControl In Parent.Controls 009 '現在の要素が指定の型であれば、スタックに登録 010 If objControl.GetType() Is type Then 011 objList.Push(objControl) 012 End If 013 '現在の要素が子を持っていたら再帰呼び出し 014 If objControl.Controls.Count > 0 Then 015 objControls = GetControls(objControl, type) 016 '再帰呼び出しした結果コントロールリストを持っていればスタックに登録 017 If Not objControls Is Nothing Then 018 For Each tmpControl In objControls 019 objList.Push(tmpControl) 020 Next 021 objControls = Nothing 022 End If 023 End If 024 Next 025 '返す 026 objControls = objList.ToArray() 027 Return objControls 028 End Function 029