Microsoft Access2003

Page 14 (2005/02)

Property Procedure
このサンプルは単純なプロパティ・プロシージャを使ったケースで、開発者向けのハンドブックのなかにあるものです。
CustomizeFormColorフォームの Choose Back Colorボタンをクリックすると、frmColorPickerフォームが開き、カラーボックスで色を選択してOKボタンをクリックすると CudstomizeFormColorフォームの背景色が変わります。
この設定はレジストリに記録されるので、次回フォームをオープンすると、その設定の背景色で開きます。
9色のカラーボックスは四角形のコントロールに適当な背景色を設定したものです。このフォームはダイアログとして設定します。
Option Compare Database  'こちらは最初に開くCustomizeFormColorのフォームモジュールです
Option Explicit
Private Sub cmdClose_Click()
  DoCmd.Close
End Sub
Private Sub cmdColor_Click() 'Choose Back Colorボタンのクリックイベント。ここでカラー選択フォームを開きます
  DoCmd.OpenForm "frmColorPicker"
End Sub
Private Sub Form_Activate()
  On Error Resume Next     '最初にこのフォームを開くと、次の二つの行でエラーになるのでエラーを無視します
  Me.詳細.BackColor = Forms!frmColorPicker.NewColor '選択フォームから戻ったときはここで背景色を変更します
  DoCmd.Close acForm, "frmColorPicker"
End Sub
Private Sub Form_Close()  '下の二つのプロシージャはレジストリへの書き込みと読み出しです。
  SaveSetting AppName:="MyApp", Section:=Me.Name, Key:="Detail_Color", setting:=Me.詳細.BackColor
End Sub
Private Sub Form_Open(Cancel As Integer)
  Me.詳細.BackColor = GetSetting(AppName:="MyApp", Section:=Me.Name, Key:="Detail_Color", Default:=Me.詳細.BackColor)
End Sub
以下は呼び出されるカラーピッカーのプロシージャです。
Option Compare Database   'これはfrmColorPickerのフォームモジュールです。
Option Explicit
Private strSelectedColor 'この変数はプロパティプロシージャで値の受渡しに使います

Public Property Get NewColor() As Variant 'このGetプロシージャは呼び出したフォームから参照されます。
  NewColor = strSelectedColor
End Property

Public Property Let NewColor(ByVal vNewValue As Variant) 'クリックされたカラーボックスの背景色の色番号を引数で受け取り
  strSelectedColor = vNewValue                   '変数strSelectesColorにセットします。
End Property

Private Sub box0_Click()     'カラーボックスのどれかをクリックすると、Property LetでプロパティNewColorに値がセットされます。
  Me.NewColor = Me!box0.BackColor
End Sub
'・・・・中略・・・・box0から box8までほとんど同じパターン
Private Sub box7_Click()
  Me.NewColor = Me!box7.BackColor
End Sub
Private Sub box8_Click()
  Me.NewColor = Me!box8.BackColor
End Sub
Private Sub cmdCancel_Click()
  DoCmd.Close
End Sub
Private Sub cmdOK_Click()   'フォームをクローズすると値を参照できないので不可視にします。
  Me.Visible = False
End Sub
こうやってプロパティ・プロシージャを眺めてみると、結局、宣言部で宣言されたプライベート変数を介してプロパティ・プロシージャ名に値を渡しているだけのようにも思えるので、それならパブリック変数に値を入れて外部プロシージャから参照しても同じではないか?ということでやってみたの次のコードです。
フォームの名前は CustomizeFormColor2 と frmColorPicker2 に変更してあります。
Option Compare Database
Option Explicit
Public NewColor As Variant
Private Sub box0_Click()
  NewColor = box0.BackColor
End Sub
・・・・・中略・・・・・
Private Sub box8_Click()
  NewColor = box8.BackColor
End Sub
Private Sub cmdCancel_Click()
  DoCmd.Close
End Sub
Private Sub cmdOK_Click()
  Me.Visible = False
End Sub
Private Sub Form_Open(Cancel As Integer)
  NewColor = Forms!CustomizeFormColor2.詳細.BackColor '初期値として入れておかないとcmdCancelで真っ黒になる
End Sub
呼び出す側は以下の通り、完全に同じです。「パブリック宣言された変数はそのフォームのプロパティになる」という解説をどこかで見かけたような気がしますが、その通りですね。だとすると、プロパティ・プロシージャの意味は・・・?

Private Sub Form_Activate()
  On Error Resume Next
  Me.詳細.BackColor = Forms!frmColorPicker2.NewColor
  DoCmd.Close acForm, "frmColorPicker2"
End Sub


Page Topへ戻る