システムにボタンがいくつかあり、ボタンがクリックされたときにカラーフォーカスを変更しようとしました。これまでのところ、私のコーディングではクリックしたときにのみボタンの色を変更できますが、他のボタンがクリックされたときにもシステムがボタンの色を通常の色にリセットできるようにしたいです。
ウェブサイトで解決策を見つけようとしましたが、サンプルが複雑すぎるため、どうすればよいのかよくわかりません。
これは、ボタンのカラーフォーカスを変更するための簡単なコーディングです。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.Button1.BackColor = Color.Gainsboro
Me.Button1.ForeColor = Color.Black
End Sub
親切に私を助けてください。ありがとうございました。
ユーザーはクリックせずにボタンに集中できるため、ボタンのイベントGotFocus
とLostFocus
イベントを処理し、そこにロジックを配置することをお勧めします。
コードの下で、Iは、フォーム内のすべてのボタンのためにこれらのイベントのハンドラを割り当て、元の記憶されたForeColor
とBackColor
のデータ構造内にTag
プロパティ。次にGotFocus
、ForeColor
とBackColor
を目的のfocusedForeColor
とに設定しますfocusedBackColor
。また、LostFocus
以前に保存した元の前色と後色を復元しTag
ます。
このコードをフォームコードに貼り付けるだけで、すべてのボタンで機能します。
'Change these to your desired color
Private focusedForeColor As Color = Color.Black
Private focusedBackColor As Color = Color.Gainsboro
Private Function GetAllControls(control As Control) As IEnumerable(Of Control)
Dim controls = control.Controls.Cast(Of Control)()
Return controls.SelectMany(Function(ctrl) GetAllControls(ctrl)).Concat(controls)
End Function
Public Sub New()
InitializeComponent()
Me.GetAllControls(Me).OfType(Of Button)().ToList() _
.ForEach(Sub(b)
b.Tag = Tuple.Create(b.ForeColor, b.BackColor)
AddHandler b.GotFocus, AddressOf b_GotFocus
AddHandler b.LostFocus, AddressOf b_LostFocus
End Sub)
End Sub
Private Sub b_LostFocus(sender As Object, e As EventArgs)
Dim b = DirectCast(sender, Button)
Dim colors = DirectCast(b.Tag, Tuple(Of Color, Color))
b.ForeColor = colors.Item1
b.BackColor = colors.Item2
End Sub
Private Sub b_GotFocus(sender As Object, e As EventArgs)
Dim b = DirectCast(sender, Button)
b.ForeColor = focusedForeColor
b.BackColor = focusedBackColor
End Sub
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加