私は分割パネルを持つフォームを持っています。 1つの分割には、最後に押されたボタンの色をプログラムで変更するボタンのグループがあります。次のループは正しく実行され、色は正しく設定されているようですが、フォームはそれを表していません。ループが完了し、ボタンの色を再確認すると、前の状態に戻ります。ボタンBackColorが期待通りに機能しない
For Each formControl As Control In Me.FormSplitContainer.Panel1.Controls
If formControl.GetType() Is GetType(Button) Then
If CType(sender, Button) Is CType(formControl, Button) Then
CType(sender, Button).BackColor = Color.White
Else
CType(sender, Button).BackColor = System.Drawing.SystemColors.ControlDark
End If
End If
Next
私は以下のコードを実行して、所望の効果を得るが、あまりエレガントなようで、ボタンが追加または削除されるように、明らかに更新が必要になることができます。
DataFeedButton.BackColor = System.Drawing.SystemColors.ControlDark
IncentiveButton.BackColor = System.Drawing.SystemColors.ControlDark
CType(sender, Button).BackColor = Color.White
誰でも私が見逃しているものを見てください。
正確にはわかりませんが、ループ内にこれを追加すると、コードが期待通りに機能します。ありがとう –
私は、cTypeが代入文の左側でうまくいかない理由は確かではありませんが、プロパティを変更する場合はSenderを適切な型の変数に代入する方が安全です。 プロパティの変更が元のボタンに影響しないように、Ctypeがボタンオブジェクトのコピーのループ外で最適化されている可能性があります。代入対象としてcTypeを使用すると、一般的には少し信頼性が低いようです。 formControlの部分と時間のSender部分を使用する理由がわかりません。それは(または)問題かもしれません。 – xpda