ms-access - 全局点击事件处理程序(WithEvents)

标签 ms-access vb6 vba

我正在尝试创建一个类模块,当有人单击我表单中的六十个文本框之一时,它将充当全局处理程序。文本框代表一周的时间卡,显示一周 7 天的上类时间、下类时间、午餐开始、结束、持续时间、每日总小时数等信息。当有人单击一天中的任何一个框时,所有框都会解锁并启用,以便用户可以编辑其中的信息。

在网上搜索全局单击事件的解决方案后,我发现我可以创建一个类模块来处理该事件,而无需为每个调用单独函数来处理该事件的文本框创建单击事件。我遇到的问题是我的类模块似乎没有处理我的事件,并且想知道是否有人可以建议解决我的问题。仅供引用,我的所有文本框均被锁定和禁用,以防止数据损坏。下面是我的代码:

''# Class module    
    Option Compare Database
    Option Explicit

    Public WithEvents TC_txtbox As TextBox
    ''# Set the textbox so that its events will be handled
    Public Property Set TextBox(ByVal m_tcTxtBox As TextBox)
        TC_txtbox = m_tcTxtBox
    End Property


    ''# Handle and onClick event of the
    Private Sub TC_txtbox_Click()
        ''# Find out the controls that where clikck
        Debug.Print Form_TimeCard.ActiveControl.Name
        Dim ctl As Control
        For Each ctl In access.Forms.Controls
            Debug.Print ctl.Name
        Next ctl
    End Sub

表单代码

Option Compare Database
Option Explicit
''# Global Variables
Public clk_inout As Boolean
Public settings
Public weekDict
Public weekOf As Variant
Public curDay As Variant
Public txtBxCollection As Collection
''# Event Handler for when the form opens
Private Sub Form_Open(Cancel As Integer)
    ''# Configure varaibles
    Me.TimerInterval = 60000 ''# 10 sec Interval
    weekOf = getFirstDayofWeek(Date)
    curDay = Date
    Set weekDict = CreateObject("Scripting.Dictionary")
    Set settings = CreateObject("Scripting.Dictionary")
    Set txtBxCollection = New Collection

    ''# Load Time Card Data
    Call initSettings
    ''# Debug.Print "Work Day Goal " & settings.Item("Work_day_goal_hrs")
    Call initDict
    Call initTextBoxEventHandler
    Debug.Print "Collection count " & txtBxCollection.Count
    Call loadDates(Date)
    Call clearDay
    Call selectDay(Date)
    Call loadWeeksData(weekOf)

    Dim ctl As Control
    Set ctl = weekDict.Item(Weekday(curDay)).Item("In")

    If IsDate(ctl.Value) And (Not ctl.Value = "") Then
        Me.but_clk_inout.Caption = "Clock Out"
        Me.but_lunch.Visible = True
        clk_inout = False
    Else
        Me.but_clk_inout.Caption = "Clock In"
        Me.but_lunch.Visible = False
        clk_inout = True
    End If
    ''# Debug.Print "Work Day Goal " & settings.Item("Salary")
End Sub

Public Sub initTextBoxEventHandler()
    Dim eventHandler As TextBoxEventHandler
    Set eventHandler = New TextBoxEventHandler
    Debug.Print "Collection count " & txtBxCollection.Count
    Set eventHandler.TextBox = Me.txt_F_in
    txtBxCollection.Add eventHandler

    Debug.Print "Collection count " & txtBxCollection.Count
End Sub

最佳答案

您是否缺少套装?公共(public)属性集应该是

Public Property Set TextBox(ByVal m_tcTxtBox As TextBox)  
  Set TC_txtbox = m_tcTxtBox  ' dont forget the Set! '
End Property 

关于ms-access - 全局点击事件处理程序(WithEvents),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3424564/

相关文章:

ms-access - 如何刷新 WebBrowser 控制 MS Access

vb6 - 如何通过属性公开 UDT 数组?

VB6 在用户控件的终止事件之后调用初始化事件

excel - protected 工作表上的 ActiveSheet.Paste 错误

vba - Excel线性插值VBA

powershell - DoCmd.OutputTo 使用 PowerShell - 第一个参数为 'wrong data type'

mysql - SQL ORDER BY by 内部 ORDER BY

.net - 如何在 .NET 中操作 VB6 集合?

vba - 如何解决VBA中的 'Next without For'错误

vba - 用于启用/禁用表单中其他复选框的复选框