ロゴ(青) Excel/VBA Tips ロゴ(緑)

  【 擬似からの脱却 】  [ Breakthrough in the Pseudo-Control Arrays ]

[ clsBpca の 軌跡 ] [ 前頁 , 次頁 , §1 , §2 , §3 , §4 , §5 , §6 , §7 , §8 , §9 , §10 , §11 , §12 ]
[ 汎用クラス , トグルラベル クラス , Focus クラス , クラス アドイン , カレンダークラス ] [ 質問はメール]

  ====================================================================
    Focus クラスモジュール [ clsBpcaFocus / clsBpcaFocus97 ] リファレンス
  ====================================================================


 

( Ver 1.4 で x64 対応となりました )

汎用クラス(clsBpca) Ver 2.0 で Enter/Exit のイベント処理が可能になりました。
これにより、ActiveControl 表示も汎用クラスで対応できます。
今後はそちらを利用して下さい。 (2014/8/11)



  --- フォーカス のあるコントロールを強調表示したい ---
  良く聞かれる話です。その為には『Enter で色を付けて、Exit で色を戻す』という処理が必要です。ただし、フォーム
上にある【全て】のコントロールの Enter/Exit に処理が必要になります。これは、コーディング量としても効率としても
無駄が多いですね。そうすると、クラスモジュール化する事でEnter/Exit を一元化できないかと考えますが、残念な事
に、クラスモジュール内では Enter/Exit が取得できません。良く聞かれる要望ではあるけれども、未だ実現されてい
ない所以です。
  先日、モーグ/VBA の掲示板で、この要望の質問があり、そこでは
        クラス内にエンドレスループ(他の処理が出来ないのでは困りますのでタイマー処理などとの併用)
        を用意し、その中で アクティブコントロールの移動を「常時監視」、変化が有ったら「 RaiseEvent に
        よりカスタムイベントを起こす」
という手法が紹介されていました。この場合「エンドレスループの合間・合間で 本来の処理 をさせて貰う」といった形式
になります(VBAユーザーの目からは多少奇異に見えるかも知れませんが、イベント監視としては当然の方向です)。
  そこで、今一度、この「フォーカス監視」問題を整理してみると、

    何故、「常時監視」が必要なのか?
            何時、どこから、どこへ、移るか判らないので、目を離す訳にいかないから
    でも、フォーカス移動って、勝手には発生しないよね?
            起こるのは[Tab/Enter/アクセスキーなどキー操作] [マウスクリック] [SetFocusメソッドを実行] した時だけだね
    前の2つは、KeyDown/Up , MouseDown/Up が起こるよね。後の1つはマクロ側で「今この時」って判るよね。
    そうすると、その時に、ActiveControl が変わっていないかチェックすれば良いだけのような?

            後の1つは、兎も角も、前の2つは全部のコントロールにイベントを用意しないといけないから、結局は、
            律儀に Enter/Exit を用意するのと同じ事

    クラスを使って一元化すれば?
            見つけたフォーカス移動をUserForm に知らせる手段が無い
    RaiseEvent 使えば〜〜?
            沢山のコントロールを纏める為には[クラスオブジェクト配列]になる訳だけど、その場合、RaiseEvent を
            受け取る為の[WithEvents ]定義がUserForm側で出来ない(WithEvents の仕様)


この問題のジレンマとは、こういう事になりますね。
  逆に言えば、クラスを使って全て(必要な部分だけでも良し)のコントロールのKeyDown/Up , MouseDown/Up イベント
を纏めつつ、UserForm側では[WithEvents ]指定でカスタムイベントを受け取れれば万事丸く収まりますよね。まさに、
『擬似からの脱却』手法にピッタリな題材です。という事で、
        実用例(その2) フォーカス移動検出クラス
を作ってみました♪
  その結果、UserForm モジュールで肝心の「フォーカス検知&色変更」のコーディングは、UserForm上にコントロール
が幾つ配置されていようと
        Private Sub FocusCtrl_GotFocus ( ByVal Index As Integer )
            FocusCtrl.Item ( Index ).BackColor = &HAAAAFF    '薄赤
        End Sub
        Private Sub FocusCtrl_LostFocus ( ByVal Index As Integer )
            With FocusCtrl
                '[InitBColor]プロパティで初期背景色に戻す
                .Item ( Index ).BackColor = .InitBColor ( Index )
            End With
        End Sub
という2つのイベントプロシジャーだけで済むようになりました。クラスモジュールは完全ブラックボックス運用(Excel97
用では一部修正必要)になりますので手間要らずです。

===========================================================================
  このフォーカス検出クラス[ clsBpcaFocus / clsBpcaFocus97 ]は、MsFormsコントロールの内、
入力系コントロールである
        CommandButton , TextBox , ComboBox , ListBox , CheckBox
        OptionButton , ToggleButton , SpinButton , ScrollBar
について[KeyDown , KeyUp , MouseDown , MouseUp]のイベント時にアクティブコントロール
を調べ、その変化に応じて『GotFocus 』『 LostFocus 』イベントを発生させます(SpinButton と
ScrollBar にはMouseDown/Upが無いので、SpinDown/Up,Change等で代用)。尚、Frame ,
MutiPage , TabStrip にも対応しています。

    (*1)  SpinButton と ScrollBar は若干反応が遅れるようです。またマウスクリックで、SpinButton と ScrollBar
            を行き来する場合、稀にScrollBar のLostFocusを見逃すようで、ScrollBar の背景色が強調のまま、
            SpinButton も強調表示になるケースがあります。
    (*2)  Frame/MutiPage 内にある[タブオーダー最後]のTextBox において、Tab/Enter 等で入力終了した
            際に、BeforeUpdate イベントで[Cancel = True ]を行なった場合、
                    カーソルは TextBox に残っているのに、フォーカス強調表示が Frame の次へ移っている
            という奇妙な状態になります。これは、clsBpcaFocus クラスによる障害ではありません。Frame/MultiPage
            が元々抱えている障害です(フォーカス強調表示した事によって目立ってしまったという訳です)。
            この症状はサンプルブックで下記のようにする事で確認できます。
                (1) Frame1 内の TextBox4 のタブオーダーを「最後」にする。
                (2) UserForm モジュールに下記コードを追加する。
                        Private Sub TextBox4_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
                            If (TextBox4.Value = "a") Then
                                Cancel = True
                            End If
                        End Sub
                (3) テストフォームを表示して、TextBox4 に [ a ] を書き込んでから、Tab/Enter する。
                (4) カーソルが TextBox4 に残ったまま、強調表示が MultiPage の TextBox へ移る。
                      この時、実際に、UserForm レベルの[ActiveControl]はMultiPage1 を指しており、
                      Frame1 を指してはいません。



[ clsBpcaFocus / clsBpcaFocus97 ] クラス定義 および サンプル ブック [ Bpca_Focus_V15.zip ] (99KB)
    ( 2004/6/23 Ver1.1 )
    ( 2005/3/11 Ver1.2)  解説文・クラスソース・サンプルソースにおいて、オブジェクト定義時での[New]指定
                                    を止めて、Initialize 時にインスタンス生成(Set ステートメント)するように修正しました。
    ( 2011/4/15 Ver1.3)  クラスの機能変更はありません。サンプルフォームから RefEdit コントロール を削除しただけです。
    ( 2011/9/20 Ver1.4)  クラスで使っている Win32-API を x64 対応に修正しました。
                                    (Item プロパティを【既定のプロパティ】にしました。記載漏れ 2014/7/22)
    ( 2014/7/22 Ver1.5)  各プロパティで Index 引数のエラーチェック(>0)が抜けていたのを修正しました。
                                    getIndex プロパティを追加しました。


  アドイン化しました [ 2005/3/8 初版 ] [ 2014/7/22 Ver 2.30 最新版で再構築 ]
      汎用クラス(clsBpca Ver 2.0) で Enter/Exit がサポートされた事に伴い、クラスアドイン
      の最新版(Ver3.00)ではフォーカス検出クラス(clsBpcaFocus)の収録を取り止めました。

==========================================================================
  [ clsBpcaFocus/clsBpcaFocus97 ] クラス    イベント/メソッド/プロパティ一覧
==========================================================================
  アドイン化したクラスモジュールを利用する場合は下記のインポート作業は不要です。

          Excel2000 以上では[ clsBpcaFocus ]クラスが利用できます。
          [ clsBpcaFocus ]クラスを使う場合は、一緒に[ clsBpcaFocusCh ]クラスもインポートする必要があります。


          Excel97 では[ clsBpcaFocus97 ]クラスを使って下さい(Excel2000 以上 と Excel97 の両方で使う場合を含む)。
          [ clsBpcaFocus97 ]クラスを使う場合は、一緒に[ clsBpcaFocus97Ch ]クラスもインポートする必要があります。


          [ clsBpcaFocusCh/clsBpcaFocus97Ch ]クラスは、各々[ clsBpcaFocus/clsBpcaFocus97 ]クラスの下位クラスです
          (ユーザーサイドで直接このクラスを使うことはありません)。

          下記で[ object ]の部分には、clsBpcaFocus/clsBpcaFocus97 クラスを定義したオブジェクト変数を記述します。
          尚、[ 2K ]表記は clsBpcaFocus 用[ 97 ]表記は clcBpcaFocus97 用無印は共通 です。

          Ver 1.4 で x64 対応になりました。

定  義
[ 2K ]
UserForm モジュールの宣言セクション(モジュールの先頭)で、下記のように定義します。

    Private  WithEvents  object  As  clsBpcaFocus

    ( object )
      任意の名前を指定して下さい。

    [ Initialize ] イベントプロシジャーにて下記のようにしてクラスのインスタンスを作成します。
        Set  object  =  New  clsBpcaFocus
    アドイン化したクラスを利用している場合は、New キーワードを使わずに下記のようにします。
           Set  object  =  CreateBpcaFocus ( )
      (CreateBpcaFocus 関数は、クラスアドイン で用意してある関数です)



[ 97 ]
UserForm モジュールの宣言セクション(モジュールの先頭)で、下記のように定義します。
WithEvents は付けません

    Private  object  As  clsBpcaFocus97

    ( object )
      任意の名前を指定して下さい。

    [ Initialize ] イベントプロシジャーにて下記のようにしてクラスのインスタンスを作成します。
        Set  object  =  New  clsBpcaFocus97
    アドイン化したクラスを利用している場合は、New キーワードを使わずに下記のようにします。
           Set  object  =  CreateBpcaFocus97 ( )
      (CreateBpcaFocus97 関数は、クラスアドイン で用意してある関数です)



メソッド
object .Add    MsForms コントロール オブジェクト

    コントロール配列化するコントロールオブジェクトを[ clsBpcaFocus ]クラスに追加するメソッドです。
    [ object ]グループとして配列化するコントロール全てに対して、 Add メソッドを繰り返し、最後に Rgst メソッド
    で登録します。

    Add メソッドで登録した順に、コントロール番号が 1 から割り当てられます。この番号が、各種イベント/プロ
    パティ において [ Index ] として扱われます。

    (注) clsBpcaFocus /clsBpcaFocus97 クラスでは、入力系コントロールのみ対象にしますので、ラベル等を
            指定した場合は無視されます(当然、その際にはコントロール番号も振られません)。

    ( MsForms コントロール オブジェクト )
      コントロール配列化する、コントロールオブジェクトを指定します。

    実際には、利用例にあるように、[Me.Controls ] コレクションから、For Each ステートメントで全てを登録します。
 

[ 2K ]
object .Rgst    Form

    Add メソッドで追加したコントロールの登録処理を行なうメソッドです。Add メソッドを繰り返した後に
    行ないます。

    ( Form )
      自UserForm を指定します。実際には「Me 」キーワードを記述して下さい。
 

[ 97 ]
object .Rgst    Form , Caller , GrpId

    Add メソッドで追加したコントロールの登録処理を行なうメソッドです。Add メソッドを繰り返した後に
    行ないます。

    ( Form )
      自UserForm を指定します。実際には「Me 」キーワードを記述して下さい。

    ( Caller )
      自UserForm を指定します。実際には「Me 」キーワードを記述して下さい。
     (補) 引数[ Form ]はMsForms.UserForm型、引数[ Caller ]はObject型で受け取ります。
              [ Caller ]はUserForm 内の「イベント通知受領プロシジャー」を呼び出す為のオブジェクト参照
              に使っています(MsForms.UserForm型ではNGな為)。

    ( GrpId )
      複数のコントロール配列グループ(= 複数の[ object ])を使用する場合、そのグループを区別する
      「文字列」を指定します。1グループしか使わないならば「空文字: "" 」でも構いません。
 

object .Clear 

    クラスの解放などの終了処理です。
    UserForm の[Terminate ]イベントで必ず実行して下さい。


object .FocusCheck 

    アクティブコントロールを調査し、フォーカスが移動している場合には[LostFocus/GotFocus ]イベント
    を発生させるメソッドです。子クラス[clsBpcaFocusCh/clsBpcaFocus97Ch ]で使われるメソッドですが、
    UserForm 側でも使います。

    UserForm モジュールでは、下記の場所で使います。
        (1) UserForm_Activate イベントプロシジャーに記述して、表示直後のフォーカスを取得します。
        (2) SetFocus メソッドを記述する場合は、その直後に、FocusCheck メソッドを記述して下さい。
        (3) 標準コントロール以外を配置している場合(RefEdit 等)、そのコントロールについて、Enter
              イベントプロシジャーを用意し、その中に、FocusCheck メソッドを記述して下さい。


プロパティ
object .Count    [ = Integer ]

    [ object ]グループのコントロール配列に登録されているコントロールオブジェクトの数を返します。
    値の取得のみ可能です。

    ( 値の取得 )
      Add メソッドで登録したコントロールの数を数値で返します。
      (ラベル等の非入力系コントロールは、Addメソッドを行なっても無視されますので、これには含まれません)
      この値は「コントロール 番号」の最大値でもあります。
 

object .getIndex    ( CtrlName )    [ = Integer ]  

    [ object ]グループのコントロール配列に登録されているコントロールオブジェクトの中から、
    コントロール名に対する Index の値(コレクション内で登録されている位置番号) を返します。
    値の取得のみ可能です。

    ( CtrlName )
      コントロール名を指定します。

    ( 値の取得 )
      コントロール名から、各プロパティで必要な Index の値を返します。
      未登録名の場合は [ -1 ] を返します。
 

object .Item    ( Index ) [ = Object ]

    [ object ]グループを構成する コントロールオブジェクトを返します。
    値の取得のみ可能です。

    UserForm モジュール側で、コントロールを配列として操作する場合に利用します。
    Item プロパティの後にピリオドを挟んで、個々のオブジェクトのプロパティを記述できます。
        例:  object .Item( 1 ).Value

    このプロパティは汎用の[Object 型]なので、コーディング時にプロパティ/メソッドの自動メンバ表示
    が機能しません。

    自動メンバ表示が機能しないとは言っても、手入力でプロパティ等を記述する事はできます(ただし、
    実行時に、そのコントロールが備えていないプロパティであれば、実行時エラーになるでしょう)。

    ( Index )
      コントロール番号(Add メソッドで追加した順に1 からの連番)を指定します。

    ( 値の取得 )
      Index に指定した番号のコントロールオブジェクトを汎用の [ Object 型 ]で返します。
      番号が「1〜コントロール数」の範囲外の場合は、[ Nothing ]が返ります。

    Item プロパティ は 【既定のプロパティ】 として定義されているので、[ .Item ] を省略して
           object ( 1 ).Value
    という風に記述する事ができます。
 

object .InitBColor    ( Index ) [ = Long ]

    [ object ]グループを構成する コントロールオブジェクトの『初期背景色(Add/Rgst メソッド実行時
    に保存したBackColor プロパティの値)』を返します。
    値の取得のみ可能です。

    UserForm モジュール側で、LostFocus イベント時に、元の背景色へ戻す際に利用します。
        例:  With FocusCtrl
                    ' [InitBColor]プロパティで初期背景色に戻す
                   .Item (Index).BackColor  =  .InitBColor (Index)
                End With

    ( Index )
      コントロール番号(Add メソッドで追加した順に1 からの連番)を指定します。

    ( 値の取得 )
      Index に指定した番号のコントロールオブジェクトの『初期背景色』を返します。
      番号が「1〜コントロール数」の範囲外の場合は、[ -1 ]が返ります。
 

イベント
Private Sub object_GotFocus ( ByVal Index As Integer )
Private Sub object_LostFocus ( ByVal Index As Integer )

    [ object ]に登録した各コントロールのフォーカスイベントは全て、これらひとつのイベントプロシジャー
    処理されます。

    ( Index )
      イベントが発生したコントロールの番号(Add メソッドで登録した順に1から割当てられます)が返ります。
      番号は[ object ]単位で割当てられます。
      イベントが発生したコントロールにアクセスするには、[ Index ]の番号を引数にして Item プロパティ を
      利用します。

      GotFocus で、コントロールの背景色を強調表示の色に変更するコーディングをして下さい。
      LostFocus で、[InitBColor ]プロパティを使って初期背景色に戻すコーディングをして下さい。

(補) clsBpcaFocus97 クラスの場合、正確に言えば「イベントプロシジャー」ではありません。
        下記の『イベント通知受領プロシジャー』 から Call される「普通のサブプロシジャー」です。

 

イベント通知 受領プロシジャー( clsBpcaFocus97 のみ)
[ 97 ]
clsBpcaFocus97 クラスの場合、利用側のUserForm モジュール内に、下記のプロシジャーを用意する
必要があります。


プロシジャー名は 固定 です(clsBpcaFocus97 と Event の間のアンダーバーは、2つ並べます)。複数の
UserForm で利用する場合は、各々のUserForm モジュール内に1つずつ用意する必要があります。

イベントが発生した際に、UserForm側が[ clsBpaFocus97 ]クラスからイベント発生の通知を受け取る為の
窓口ルーチンです。ここから、[ GrpId , EventId ] の内容によって、各イベント処理ルーチン(上記)へ
分岐していきます。

下記のプロシジャー名で [ Ctrl ]部分は任意です。 GrpId で指定した文字列 または そのグループの
object の名前などにすると良いでしょう。

Public Sub clsBpcaFocus97__Event _
    ( ByVal GrpId As String, ByVal EventId As String, ByVal Index As Integer )

    Select Case GrpId
        Case "xxxx"    ' Rgst メソッドで指定した GrpId 文字列
            Select Case EventId
                Case "Got"
                    Call Ctrl_GotFocus ( Index )
                Case "Lost"
                    Call Ctrl_LostFocus ( Index )
            End Select

        Case "yyyy"
            Select  EventId
                Case  ‥‥‥
                Case  ‥‥‥
            End Select

        Case Else
    End Select
End Sub


    ( GrpId )
      UserForm上で、複数のグループが有る場合でも、この窓口ルーチンは『唯1つ』です。どのグループ
      に対する通知なのかが返りますので、この[GrpId ]によって、各グループのイベント処理ルーチン へ
      振り分けて下さい。

    ( EventId )
      どのイベントが発生したのかが、"Got" または "Lost" の文字列で返りますので、この[EventId ]によって、
      各イベント処理ルーチン へ振り分けて下さい。

    ( Index )
      イベントが発生したコントロールの番号(Add メソッドで登録した順に、1から設定されます)が返ります。
      そのまま、各コントロールのイベント処理ルーチンへ引き継いで下さい。

 

利用 方法
[ 2K ]




















[ 2K ]

























[ 2K ]

下記はサンプルブックの、UserForm モジュールです。これに倣ってコーディングして下さい。

  'フォーカス処理クラス
  Private WithEvents FocusCtrl As clsBpcaFocus

  '-------------------------------------------------------
  Private Sub UserForm_Initialize ( )
  Dim objCtrlWK As Object
  Dim i As Integer

    Set FocusCtrl = New clsBpcaFocus

    '[Me.Controls]でFrame1/MutiPage1内のコントロールも全て入る
    'RefEdit/Labelなど対象外のコントロールはクラス内で除かれる

    For Each objCtrlWK In Me.Controls
        FocusCtrl.Add  objCtrlWK
    Next objCtrlWK

    FocusCtrl.Rgst  Me    'クラス登録
  End Sub

  Private Sub UserForm_Activate ( )
    '※ Show直後に[FocusCheck]を実行して初期フォーカスを取得する
    FocusCtrl.FocusCheck
  End Sub

  Private Sub UserForm_Terminate ( )
    FocusCtrl.Clear    'クラス解放【必須】
    Set FocusCtrl = Nothing
  End Sub

  '-------------------------------------------------------
  'フォーカスイベントは【GotFocus 】と【LostFocus 】
  '[Index]で返るコントロール番号により、
  '[Item]プロパティで対象コントロールのオブジェクトを操作する


  Private Sub FocusCtrl_GotFocus ( ByVal Index As Integer )
    FocusCtrl.Item ( Index ).BackColor = &HAAAAFF    '薄赤
  End Sub

  Private Sub FocusCtrl_LostFocus ( ByVal Index As Integer )
    With FocusCtrl
        '[InitBColor]プロパティで初期背景色に戻す
        .Item ( Index ).BackColor = .InitBColor ( Index )
    End With
  End Sub

  '-------------------------------------------------------
  Private Sub CommandButton1_Click ( )
    'SetFocus した時は直後には必ず[FocusCheck]を実行する
    TextBox3.SetFocus
    FocusCtrl.FocusCheck
  End Sub

  Private Sub CommandButton2_Click ( )
    'SetFocus した時は直後には必ず[FocusCheck]を実行する
    TextBox4.SetFocus
    FocusCtrl.FocusCheck
  End Sub

  Private Sub RefEdit1_Enter ( )
    'サポート対象外のコントロールを使っている場合は、
    '必ずEnterイベントプロシジャーを用意して[FocusCheck]を実行する

    FocusCtrl.FocusCheck
  End Sub


 

[ 97 ]




















[ 97 ]


























[ 97 ]




















[ 97 ]

下記はサンプルブックの、UserForm モジュールです。これに倣ってコーディングして下さい。

  'フォーカス処理クラス
  Private FocusCtrl As clsBpcaFocus97

  '---------------------------------------------------------
  Private Sub UserForm_Initialize ( )
  Dim objCtrlWK As Object
  Dim i As Integer

    Set FocusCtrl = New clsBpcaFocus97

    '[Me.Controls]でFrame1/MutiPage1内のコントロールも全て入る
    'RefEdit/Labelなど対象外のコントロールはクラス内で除かれる

    For Each objCtrlWK In Me.Controls
        FocusCtrl.Add    objCtrlWK
    Next objCtrlWK

    FocusCtrl.Rgst Me, Me.Name, "FocusCtrl"      'クラス登録
  End Sub

  Private Sub UserForm_Activate ( )
    'Show直後に[FocusCheck]を実行して初期フォーカスを取得する
    FocusCtrl.FocusCheck
  End Sub

  Private Sub UserForm_Terminate ( )
    FocusCtrl.Clear      'クラス解放【必須】
    Set FocusCtrl = Nothing
  End Sub

  '---------------------------------------------------------
  'clsBpcaFocus97クラス利用の場合、下記【FocusCtrl_GotFocus 】と
  '【FocusCtrl_LostFocus 】の2つはイベントプロシジャーではありません。
  '[イベント通知受領プロシジャー]を通してCallされる、通常のサブプロシジャーです。
  '[Index]で返るコントロール番号により、
  '[Item]プロパティで対象コントロールのオブジェクトを操作する


  Private Sub FocusCtrl_GotFocus ( ByVal Index As Integer )
    FocusCtrl.Item ( Index ).BackColor = &HAAAAFF      '薄赤
  End Sub

  Private Sub FocusCtrl_LostFocus ( ByVal Index As Integer )
    With FocusCtrl
      '[InitBColor]プロパティで初期背景色に戻す
      .Item ( Index ).BackColor = .InitBColor ( Index )
    End With
  End Sub

  '---------------------------------------------------------
  Private Sub CommandButton1_Click ( )
    'SetFocus した時は直後には必ず[FocusCheck]を実行する
    TextBox3.SetFocus
    FocusCtrl.FocusCheck
  End Sub

  Private Sub CommandButton2_Click ( )
    'SetFocus した時は直後には必ず[FocusCheck]を実行する
    TextBox4.SetFocus
    FocusCtrl.FocusCheck
  End Sub

  Private Sub RefEdit1_Enter ( )
    'サポート対象外のコントロールを使っている場合は、
    '必ずEnterイベントプロシジャーを用意して[FocusCheck]を実行する

    FocusCtrl.FocusCheck
  End Sub

  '===============================================================
  '===== イベント通知受領プロシジャー(Public) ==========================
  '===============================================================
  '[clsBpcaFocus97]クラスでは、[clsBpcaFocus97]クラスに登録した
  'コントロールのイベントは、全てのグループが、この
  '        通知受領プロシジャー  [clsBpcaFocus97__Event] <名称固定>
  'を通して送られてくる。
  '[GrpId]によって、所定のグループ別のイベントプロシジャーに分岐させる。
  '(通知受領プロシジャーは、名前の重複を防ぐ為に敢えてアンダーバーを2つ繋げている)


  Public Sub clsBpcaFocus97__Event _
        (ByVal GrpId As String, ByVal EventId As String, ByVal Index As Integer)
    Select Case GrpId
        Case "FocusCtrl"
            Select Case EventId
                Case "Got"
                    Call FocusCtrl_GotFocus ( Index )
                Case "Lost"
                    Call FocusCtrl_LostFocus ( Index )
            End Select
  '      Case "xxxx"
  '          Select Case EventId
  '              Case "Got"
  '                  Call xxxx_GotFocus ( Index )
  '              Case "Lost"
  '                  Call xxxx_LostFocus(Index)
  '          End Select

        Case Else
    End Select
  End Sub


 






  ====================================================================
    Focus クラスモジュール [ clsBpcaFocus / clsBpcaFocus97 ] リファレンス
  ====================================================================

[ 前頁 , 次頁 , §1 , §2 , §3 , §4 , §5 , §6 , §7 , §8 , §9 , §10 , §11 , §12 ]
[ 汎用クラス , トグルラベル クラス , Focus クラス , クラス アドイン , カレンダークラス ] [ 質問はメール]


[ Home へ戻る ]

ロゴ(ゴールド)   ロゴ(ゴールド)

角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2004 Allrights Reserved.