Enabled=Falseにした時、文字色を変更させない


Enabled=Falseにした時、文字色が薄いグレーになってしまうが黒のまま変更させない。


<方法1>
EnabledプロパティをShadowsを使用し動作を置き換える。
<デメリット>
ComboBoxではReadOnlyプロパティが存在しないので実装できない。
EnabledChangedイベントが発生しなくなる。

例)Enabled=Falseの時、ReadOnly=True、TabStop=Falseにし背景色を変更する。
   Private _Enabled As Boolean = True

   Shadows Property Enabled() As Boolean
       Get
           Return _Enabled
       End Get
       Set(ByVal value As Boolean)
           If value <> _Enabled Then
               If value = False Then
                   Me.ReadOnly = True
                   Me.TabStop = False
                   Me.BackColor = SystemColors.Control
               Else
                   Me.ReadOnly = False
                   Me.TabStop = True
                   Me.BackColor = Color.White
               End If
               _Enabled = value
           End If
       End Set
   End Property



<方法2>
Enabledのメッセージをフックし色を変更させる。
<デメリット>
ソースは短いが、内容をぱっと見て理解するのが難しい。

例)Enabled=Falseの時、フォントカラーを変更させる
   Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
       Const WMEnabled As Integer = &HA
       If m.Msg = WMEnabled Then
           Me.ForeColor = Color.Black
           Return
       End If
       MyBase.WndProc(m)
   End Sub




































.
最終更新:2008年07月17日 13:48