フォームがたくさんになって面倒になるから、できるだけ手抜きする試み。
SharedResource MSysResourcesに格納しているイメージをボタンに使用
イメージの差し替えとかできるし埋め込むよりいいでしょ。他加えるとしたらフォームキーボードイベントを補足して特定のショートカットキー操作を制御するとか、MsgBoxをラップするとか、フォームエラーイベントを共通化しちゃうとか。デザインビューでのみ設定できるプロパティ以外であればいいわけだ。
ClassModule:Class_FormDefault
Option Compare Database Option Explicit Private WithEvents Frm As Access.Form Private WithEvents cmdClose As Access.CommandButton Private WithEvents cmdQuit As Access.CommandButton Private CloseCancel As Boolean Private Sub Class_Initialize() Set Frm = Application.CodeContextObject FrmSettings BindcmdButtons CloseCancel = True End Sub Private Sub Class_Terminate() On Error Resume Next Set Frm = Nothing Set cmdClose = Nothing Set cmdQuit = Nothing End Sub Private Sub FrmSettings() With Frm Select Case .DefaultView 'acDefView Case acDefViewSingle .NavigationButtons = False .RecordSelectors = False Case acDefViewDatasheet .NavigationButtons = True .RecordSelectors = True Case Else 'Planned Site End Select .OnUnload = "[EVENT PROCEDURE]" End With End Sub Private Sub BindcmdButtons() Dim cmdbtn As Access.Control For Each cmdbtn In Frm.Controls Select Case cmdbtn.Tag Case "Close" Set cmdClose = cmdbtn With cmdClose .OnClick = "[EVENT PROCEDURE]" .OnGotFocus = "[EVENT PROCEDURE]" .OnLostFocus = "[EVENT PROCEDURE]" .PictureType = 2 .Picture = "cmdClose16" End With Case "Quit" Set cmdQuit = cmdbtn With cmdQuit .OnClick = "[EVENT PROCEDURE]" .OnGotFocus = "[EVENT PROCEDURE]" .OnLostFocus = "[EVENT PROCEDURE]" .PictureType = 2 .Picture = "cmdQuit16" End With Case Else 'Planned site End Select Next End Sub Private Sub cmdClose_Click() CloseCancel = False DoCmd.Close acForm, Frm.Name End Sub Private Sub cmdClose_GotFocus() cmdClose.Picture = "cmdClose32" End Sub Private Sub cmdClose_LostFocus() cmdClose.Picture = "cmdClose16" End Sub Private Sub cmdQuit_Click() CloseCancel = False Application.CloseCurrentDatabase End Sub Private Sub cmdQuit_GotFocus() cmdQuit.Picture = "cmdQuit32" End Sub Private Sub cmdQuit_LostFocus() cmdQuit.Picture = "cmdQuit16" End Sub Private Sub Frm_Unload(Cancel As Integer) Cancel = CloseCancel End SubForm:
Option Compare Database Option Explicit Private clsFD As Class_FormDefault Private Sub Form_Open(Cancel As Integer) Set clsFD = New Class_FormDefault End Sub Private Sub Form_Close() Set clsFD = Nothing End Sub
0 件のコメント:
コメントを投稿