#783 | イベントプロパティを動的に設定するには? | フォーム、VBA | |
「#782 複数コントロールのイベントプロシージャを1ケ所に集約するには?」では各コントロールのイベント発生時に呼び出すプロシージャをプロパティシートで固定値として設定していましたが、「イベント」プロパティの値は動的に設定したり切り替えたりすることができます。その方法を使うことで、呼び出すプロシージャに対してコントロールごとに異なる引数を指定することができます。 次の例では、フォーム読み込み時に「OnGotFocus/フォーカス取得後」と「OnLostFocus/フォーカス喪失後」の2つのイベントのプロパティを動的に設定しています。 また両方とも呼び出すプロシージャは同じですが、どのコンボボックスでイベントが発生したかを知らせるため、1つめの引数としてそれぞれ異なる値(コントロール名)を渡しています。 さらに、フォーカス取得後と喪失後とで2つめの引数の値を変えることで、2種類のイベントの共通化も図っています。 Private Sub Form_Load() 'フォーム読み込み時 Dim iintLoop As Integer For iintLoop = 1 To 5 With Me("cbo従業員" & iintLoop) 'フォーカス取得後プロパティを設定 .OnGotFocus = "=ComboFocus(""cbo従業員" & iintLoop & """, True)" 'フォーカス喪失後プロパティを設定 .OnLostFocus = "=ComboFocus(""cbo従業員" & iintLoop & """, False)" End With Next iintLoop End Sub Private Function ComboFocus(strCtlName As String, blnFocus As Boolean) '各コンボボックスの共通処理 'blnFocusのTrue/Falseに応じてコンボボックスの前景色と背景色を切り替え With Me(strCtlName) If blnFocus Then 'フォーカス取得後 .ForeColor = vbWhite .BackColor = vbBlue Else 'フォーカス喪失後 .ForeColor = vbBlack .BackColor = vbWhite End If End With End Function |
|||
|
Copyright © T'sWare All rights reserved |