私は、関連するトグルボタン(グループトグルと呼ぶ)で目に見えるように有効/無効にしたいコントロールのグループを持つフォームを作っています。各グループは、コントロールの種類の異なる様々なを持っているので、私はトグル動作を処理するための一般的な手順を行った。ループ内で変更されたときに、このラベルのForeColorが目に見える形で変化しないのはなぜですか?
'constants for control ForeColors
Public Enum LabelForeColor
Default = 8355711
Off = 14277081
End Enum
Public Enum ListForeColor
Default = 4210752
Off = 12566463
End Enum
Public Sub EnableControl(Ctrl As Control, Enabled As Boolean)
With Ctrl
Select Case Ctrl.ControlType
Case acLabel
If Enabled Then .ForeColor = LabelForeColor.Default Else .ForeColor = LabelForeColor.Off
Debug.Print "LABEL", .ForeColor
Case acListBox
If Enabled Then .ForeColor = ListForeColor.Default Else .ForeColor = ListForeColor.Off
.Enabled = Enabled
Debug.Print "LIST", .ForeColor
Case acCommandButton
.Enabled = Enabled
Debug.Print "BUTTON", "NA"
Case acCheckBox
.Enabled = Enabled
Debug.Print "CHECK", "NA"
Case Else
Debug.Print "Control [" & .Name & "] is not of a type that EnableControl can handle."
End Select
End With
End Sub
コントロールの各グループがコレクションで表現されます。フォームが読み込まれると、特定のタグプロパティを持つすべてのコントロールが対応するコレクションに追加されます。グループを切り替え任意のコレクションに追加され、代わりに次のようになりイベントプロシージャ持っていません。私はGroupToggleをクリックすると、対応するグループ内のすべてのコントロールが目に見えて、適切にラベルを除いてを変更、
Private Sub ToggleGroup1_AfterUpdate()
Dim State As Boolean
'a public function that converts the toggle button's value to a boolean
State = FormCommon.ToggleButtonState(ToggleGroup1.Value)
Dim iCtrl As Control
For Each iCtrl In Controls_ByPlant
FormCommon.EnableControl iCtrl, State
Next iCtrl
End Sub
を。トラブルシューティングの時間後、ここで私が知っているものだ:
- ラベルの
ForeColor
プロパティが変更を行いますが、目に見えません。 EnableControl
をループ外のラベルに呼び出すと、ラベルが視覚的に変わります。- ラベルオブジェクトを特にサブルーチンに渡すか、グループコレクションから渡すかどうかは関係ありません。私はグループのトグルイベントの一部としてラベルを切り替える-無効にし、再度それを無効にしようとするそのラベルに特に
EnableControl
を呼び出すと変更は両方のケース
- ラベルオブジェクトを特にサブルーチンに渡すか、グループコレクションから渡すかどうかは関係ありません。私はグループのトグルイベントの一部としてラベルを切り替える-無効にし、再度それを無効にしようとするそのラベルに特に
- に表示され、(おそらく目に見える変化はありません
ForeColor
プロパティは既に「オフ」の色に設定されています) - グループトグルイベントが実行されている間に画面を更新してからオフにすることは、イベントの最後に再度オンにしても効果はありません。
For Each
の代わりにFor i = 1 to .Count
を指定してグループトグルイベントを実行しても、違いはありません。- この問題はForeTintのような別のビジュアルプロパティを代わりに変更する場合にも発生します。
- (パーコメント)
Repaint
が - (コメントあたり)違いはありません
DoEvents
は違い
ですが、なぜでしょうがありませんか?
VBAではなく条件付き書式を使用します。 – June7
@ June7あなたが何を言っているのか分かりません。 –
Bing:アクセス条件付き書式設定。 https://support.office.com/en-us/article/Change-the-appearance-of-a-control-by-using-conditional-formatting-6BA9E9FA-4347-4183-B335-44E43B05E22F – June7