2010-08-09 6 views
0

J'ai une collection de gestionnaires d'événements de zones de texte étendues qui gèrent l'événement click. Sur un clic de n'importe quelle zone de texte dans une colonne, le gestionnaire d'événements déverrouille chaque zone de texte de cette colonne en appelant son nom de formulaire, puis définit une variable avec une variable d'identification dans le gestionnaire actif. Est-il possible de définir cette variable d'identification dans d'autres objets de gestionnaire à l'intérieur du gestionnaire actif du gestionnaire. Est-ce que je devrais passer la collection en référence à chaque objet de gestionnaire pour accomplir ceci ou est-il un moyen que je peux placer et l'événement pour passer les données entre les objets?Transmettre des données entre les gestionnaires d'événements de la collection

Voici le code à mon objet gestionnaire d'événements

Option Compare Database 
Option Explicit 
Private WithEvents TC_txtbox As TextBox 
Private m_Day As String 
' Set the textbox so that its events will be handled 
Public Property Set TextBox(ByVal m_tcTxtBox As access.TextBox) 
    Set TC_txtbox = m_tcTxtBox 
    TC_txtbox.OnClick = "[Event Procedure]" 
    TC_txtbox.Enabled = True 
    TC_txtbox.Locked = True 
    TC_txtbox.BackColor = 16777215 
End Property 
' Handle and onClick event of the textboxes 
Private Sub TC_txtbox_Click() 
    ' Find out the controls that where click 
    If Not m_Day = "" Then 
     ' Highlight text inside text box 
     Form_TimeCard.ActiveControl.SelStart = 0 
     Form_TimeCard.ActiveControl.SelLength = Len(Form_TimeCard.ActiveControl.Text) 
    Else ' Day has not been set enable text boxes 
     m_Day = Form_TimeCard.ActiveControl.Tag 

     Dim ctl As Control 
     For Each ctl In Form_TimeCard.Controls 
      If m_Day = ctl.Tag Then 
       ctl.Locked = False 
       ctl.BackColor = 65535 
      End If 
     Next ctl 

     ' Save button is now visible 
     Form_TimeCard.but_save.Visible = True 
     Form_TimeCard.but_save.Top = 3540 
     Select Case m_Day 
      Case "Sunday" 
       Form_TimeCard.but_save.Left = 1440 
      Case "Monday" 
       Form_TimeCard.but_save.Left = 2640 
      Case "Tuesday" 
       Form_TimeCard.but_save.Left = 3780 
      Case "Wednesday" 
       Form_TimeCard.but_save.Left = 4920 
      Case "Thursday" 
       Form_TimeCard.but_save.Left = 6060 
      Case "Friday" 
       Form_TimeCard.but_save.Left = 7200 
      Case "Saturday" 
       Form_TimeCard.but_save.Left = 8340 
     End Select 
    End If 
End Sub 
' Get control name 
Public Property Get Name() As String 
    Name = TC_txtbox.Name 
End Property 
' Get day of the week 
Public Property Get Tag() As String 
    Tag = TC_txtbox.Tag 
End Property 
' Save button was clicked 
Public Sub Save() 
    Dim ctl As Control 
    Debug.Print "Day = " & m_Day 
    For Each ctl In Form_TimeCard.Controls 
     If m_Day = ctl.Tag Then 
      Debug.Print ctl.Name & "=" & ctl.Tag 
      ctl.BackColor = 16777215 
      ctl.Locked = True 
     End If 
    Next ctl 
    m_Day = "" 
End Sub 
' Get the data from the textbox 
Public Function Value() As Variant 
    Value = TC_txtbox.Value 
End Function 

Voici mon code principal

Option Compare Database 
Option Explicit 
' Global Variables 
Private clk_inout As Boolean 
Private settings As Dictionary 
Private weekDict As Dictionary 
Private weekOf As Variant 
Private curDay As Variant 
Private txtBxCollection As Collection 

Private Sub but_save_Click() 
    Dim ctl As TextBoxEventHandler 
    Dim Day As String 
    Dim dayDetail(1 To 7) As Variant 
    Dim x As Integer 
    x = 1 

    Select Case Me.ActiveControl.Left 
     Case 1440 
      Day = "Sunday" 
     Case 2640 
      Day = "Monday" 
     Case 3780 
      Day = "Tuesday" 
     Case 4920 
      Day = "Wednesday" 
     Case 6060 
      Day = "Thursday" 
     Case 7200 
      Day = "Friday" 
     Case 8340 
      Day = "Saturday" 
    End Select 

    For Each ctl In txtBxCollection 
     If ctl.Tag = Day Then 
      Debug.Print ctl.Name 
      dayDetail(x) = ctl.Value 
      x = x + 1 
      ctl.Save 
     End If 
    Next ctl 
End Sub 

' Event Handler for when the form opens 
Private Sub Form_Open(Cancel As Integer) 
    ' Configure varaibles 
    Me.TimerInterval = 60000 ' 60 sec Interval 
    weekOf = getFirstDayofWeek(Date) 
    curDay = Date 
    Set weekDict = New Dictionary 
    Set settings = New Dictionary 
    Set txtBxCollection = New Collection 

    ' Load Time Card Data 
    Call initSettings 
    Debug.Print "Week Dict Count=" & weekDict.Count 
    'Debug.Print "Work Day Goal " & settings.Item("Work_day_goal_hrs") 
    Call initDict 
    Call initTextBoxEventHandler 
    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 
End Sub 
' Regular task to be performed 
Private Sub Form_Timer() 
    If Not (curDay = Date) Then 
     Call clearDay 
     Call selectDay(Date) 
    End If 
    If Not (weekOf = getFirstDayofWeek(Date)) Then 
     weekOf = getFirstDayofWeek(Date) 
     Call loadDates(Date) 
     Call loadWeeksData(Date) 
    End If 
    'Debug.Print "sal=" & settings.Item(1) 
End Sub 
' On Close of Form Insert/Update Time Card 
Private Sub Form_Close() 
    ' dump time card into database 
    Set weekDict = Nothing 
    Set settings = Nothing 
End Sub 
' Code for minimizing the window to the system tray 
Private Sub Form_Load() 
' Debug.Print "HWND: " & Hex(GetWindowHWnd("OMain")) 
' Debug.Print "MENU: " & Hex(GetWindowSysMenu("OMain")) 
' AddToTray GetWindowHWnd("OMain"), GetWindowSysMenu("OMain") 
' SetTrayTip "Hollo World" 
' CreatePopup 
' ShowWindow GetWindowHWnd("OMain"), SW_HIDE 
End Sub 
Private Sub Form_Unload(Cancel As Integer) 
' RemoveFromTray GetWindowHWnd("OMain") 
' ShowWindow GetWindowHWnd("OMain"), SW_SHOW Or SW_RESTORE 
' DestroyMenu hMenu 
End Sub 
' Pop up form for configuring your settings 
Private Sub but_settings_Click() 
On Error GoTo EH 
    Dim results As Variant 
    Dim args As String 
    args = "Settings|" & settings.Item("Salary") & "|" & _ 
         settings.Item("Dental") & "|" & _ 
         settings.Item("401k") & "|" & _ 
         settings.Item("Federal") & "|" & _ 
         settings.Item("Social_Security") & "|" & _ 
         settings.Item("CT_tax") & "|" & _ 
         settings.Item("Work_day_goal_hrs") 

    results = settingsInputBox("Settings", settings) 

    If Not results = vbNullString Then 
     Debug.Print "Salary " & results(0) 
     Debug.Print "Dental " & results(1) 
     Debug.Print "Medical " & results(2) 
     Debug.Print "401K " & results(3) 
     Debug.Print "Federal Tax " & results(4) 
    Else 
     Debug.Print "Cancel button clicked" 
    End If 
EndIt: 
    Exit Sub 
EH: 
    MsgBox Err.Number & ": " & Err.Description 
    Resume EndIt 
End Sub 
' End system tray minimize code 
' Clock inout button has been pressed 
Private Sub but_clk_inout_Click() 
    Dim inputTime As Variant 
    Dim goal As Integer 

    Select Case Me.but_clk_inout.Caption 
     Case "Clock In" 
      inputTime = InputBox("Enter Time", "Clock In") 
      If (Not inputTime = "") And IsDate(inputTime) Then 
       If Not dateExists(curDay) Then 
        'goal = settings.Item("Work_day_goal_hrs") ' Problem settings dictionary is no longer set 
        Me.txt_outGoal.Value = DateAdd("h", settings.Item("Work_day_goal_hrs"), "#" & inputTime & "#") 
        Me.but_clk_inout.Caption = "Clock Out" 
        Me.but_lunch.Visible = True 
        Me.lbl_outGoal.Visible = True 
        Me.txt_outGoal.Visible = True 
        Call logClkTime(True, inputTime) 
        clk_inout = True 
       Else 
        MsgBox ("You already clocked in") 
        Exit Sub 
       End If 
      Else 
       MsgBox ("Please enter a valid time") 
       Exit Sub 
      End If 
     Case "Clock Out" 
      inputTime = InputBox("Enter Time", "Clock Out") 
      If Not inputTime = "" And IsDate(inputTime) Then 
       Me.but_clk_inout.Caption = "Clock In" 
       Me.but_lunch.Visible = False 
       Call logClkTime(False, inputTime) 
       clk_inout = False 
      Else 
       Exit Sub 
      End If 
     Case "Reset" 
      If clk_inout Then 
       Me.but_clk_inout.Caption = "Clock In" 
      Else 
       Me.but_clk_inout.Caption = "Clock Out" 
      End If 
      Call loadDates(Date) 
      Call clearDay 
      Call selectDay(Date) 
      Call loadWeeksData(weekOf) 
    End Select 
End Sub 
' Close Form 
Private Sub but_close_Click() 
    DoCmd.Close acForm, "TimeCard", acSaveYes 
End Sub 
' Find a time card already 
Private Sub but_search_Click() 
    Dim strSQL As String 
    Dim dateInput As Variant 
    Dim rs As DAO.Recordset 
    Dim dbs As DAO.Database 
    Set dbs = CurrentDb() 
    dateInput = Format(InputBox("Date XX/XX/XXXX", "Search by week"), "mm/dd/yyyy") 

    If dateInput = "" Then 
     MsgBox ("Please enter a valid date") 
     Exit Sub 
    ElseIf IsDate(dateInput) Then 
     strSQL = "SELECT Week_Of FROM Time_Clock " & _ 
       "WHERE (Labor_date=#" & dateInput & "# " & _ 
       "OR Week_Of=#" & dateInput & "#);" 

     Set rs = dbs.OpenRecordset(strSQL) 

     If Not (rs.BOF And rs.EOF) Then 
      rs.MoveLast 
      rs.MoveFirst 
      Dim pastWeek As Variant 
      pastWeek = rs![Week_Of] 
      Call loadDates(pastWeek) 
      Call loadWeeksData(pastWeek) 
      Call clearDay 
      Me.but_clk_inout.Caption = "Reset" 
     Else 
      MsgBox ("Date does not exist") 
     End If 

     rs.Close 
    Else 
     MsgBox ("Invalid Date") 
    End If 
End Sub 
' Data into week table 
Public Sub loadWeeksData(wkDate As Variant) 
    Dim weeklyHrs As Single 
    Dim strSQL As String 
    Dim dbs As DAO.Database 
    Dim rs As Recordset 
    Set dbs = CurrentDb() 
    Dim ctl As Control 

    weeklyHrs = 0 
    strSQL = "SELECT * FROM Time_Clock " & _ 
      "WHERE Week_Of=" & Format("#" & wkDate & "#", "mm/dd/yyyy") & ";" 
    Set rs = dbs.OpenRecordset(strSQL) 

    If Not (rs.BOF And rs.EOF) Then 
     Call clearTimeChart 
     Do While Not rs.EOF 
      weekDict(Weekday(rs![Labor_date]))("In").Value = Format(rs![Clock_In], "hh:mm ampm") 
      'Set ctl = weekDict(Weekday(rs![Labor_date]))("In") 
      'ctl.Value = Format(rs![Clock_In], "hh:mm ampm") 
      weekDict(Weekday(rs![Labor_date]))("In").Value = Format(rs![Clock_In], "hh:mm ampm") 
      weekDict(Weekday(rs![Labor_date]))("Lunch_Out").Value = rs![Lunch_out] 
      weekDict(Weekday(rs![Labor_date]))("Lunch_in").Value = rs![Lunch_in] 
      weekDict(Weekday(rs![Labor_date]))("Lunch_total").Value = rs![Lunch_total] 

      If rs![Clock_Out] = #12:01:00 AM# And Not rs![Clock_In] = #12:00:00 AM# Then 
       weekDict(Weekday(rs![Labor_date]))("Out").Value = rs![Clock_Out] 
      Else 
       weekDict(Weekday(rs![Labor_date]))("Out").Value = "" 
      End If 

      Debug.Print "(" & rs![Labor_date] & ") IN/OUT "; rs![Clock_In] & "/" & rs![Clock_Out] 

      weekDict(Weekday(rs![Labor_date]))("Day_total").Value = rs![Total_Hours_Worked] 
      weekDict(Weekday(rs![Labor_date]))("Paid_OT").Value = rs![Paid_OT] 
      weeklyHrs = weeklyHrs + rs![Total_Hours_Worked] 
      rs.MoveNext 
     Loop 
     Debug.Print "Weekly Hours " & weeklyHrs 
    End If 
End Sub 
' Take Lunch Button Pressed 
Private Sub but_lunch_Click() 
    Dim strSQL As String 
    If dateExists(curDay) Then 
     strSQL = "UPDATE Time_Clock " & _ 
       "SET Lunch_out=#11:30#, Lunch_in=12:00, Lunch_total=30 " & _ 
       "WHERE Labor_date=#" & curDay & "#;" 
     weekDict(Weekday(curDay))("Lunch_Out").Value = "11:30 AM" 
     weekDict(Weekday(curDay))("Lunch_in").Value = "12:00 PM" 
     weekDict(Weekday(curDay))("Lunch_total").Value = "30 mins" 
    Else 
     MsgBox ("Please clock in first before you take your lunch") 
    End If 
End Sub 
' Load dates in each column 
Public Sub loadDates(today As Variant) 
    Me.txt_week_begin.Value = today - (Weekday(today) - 1) 
    Me.txt_Sun_date.Value = today - (Weekday(today) - 1) 
    Me.txt_M_date.Value = today - (Weekday(today) - 2) 
    Me.txt_T_date.Value = today - (Weekday(today) - 3) 
    Me.txt_W_date.Value = today - (Weekday(today) - 4) 
    Me.txt_R_date.Value = today - (Weekday(today) - 5) 
    Me.txt_F_date.Value = today - (Weekday(today) - 6) 
    Me.txt_Sat_date.Value = today - (Weekday(today) - 7) 
End Sub 
Public Sub loadSettings() 

End Sub 
' Insert clock time into database 
Public Sub logClkTime(inout As Boolean, clkTime As Variant) 
    Dim strSQL As String 
    Dim dbs As DAO.Database 
    Dim rs As DAO.Recordset 
    Set dbs = CurrentDb() 

    Select Case inout 
     Case True ' clock in 
      strSQL = "INSERT INTO Time_Clock (Week_Of, Labor_date, Clock_In) " & _ 
        "VALUES (#" & weekOf & "#, #" & curDay & "#, #" & Format(clkTime, "hh:mm") & "#);" 
     Case False ' clock out 
      Dim worked, worked_strt As Single 
      Dim clkOut As Variant 
      Dim clkIn As Variant 
      clkOut = clkTime 
      clkIn = weekDict.Item(Weekday(curDay)).Item("In").Value 
      worked = DateDiff("h", clkIn, clkOut) + (DateDiff("n", clkIn, clkOut) - _ 
        (DateDiff("h", clkIn, clkOut) * 60))/60 
      worked_strt = Floor(worked) 

      strSQL = "UPDATE Time_Clock (Clock_Out, Total_Hours_Worked, Straight_hours) " & _ 
        "SET Clock_Out=#" & Format(clkTime, "hh:mm") & "#, Total_Hours_Worked=" & worked & ", Straight_hours=" & worked_strt & " " & _ 
        "WHERE Labor_date=#" & curDay & "#;" 
    End Select 
    Debug.Print strSQL 
    dbs.Execute (strSQL) 
    dbs.Close 
End Sub 
' Has this date been logged into the database 
Public Function dateExists(clkdDate As Variant) As Boolean 
    Dim dbs As DAO.Database 
    Dim rs As DAO.Recordset 
    Dim strSQL As String 
    Set dbs = CurrentDb() 

    If IsDate(clkdDate) Then 
     strSQL = "SELECT ID FROM Time_Clock WHERE Labor_date=#" & clkdDate & "#;" 
     Set rs = dbs.OpenRecordset(strSQL) 
     If Not (rs.BOF And rs.EOF) Then 
      If rs.RecordCount <> 0 Then 
       Debug.Print "Date Exists" 
       dateExists = True 
      End If 
     Else 
      Debug.Print "Date Does Not Exists" 
      dateExists = False 
     End If 
     rs.Close 
    End If 
    dbs.Close 
End Function 
' Draw a red box around the current day 
Public Sub selectDay(today As Variant) 
    Select Case Weekday(today) 
     Case 1 
      Me.rec_Sun.Visible = True 
     Case 2 
      Me.rec_M.Visible = True 
     Case 3 
      Me.rec_T.Visible = True 
     Case 4 
      Me.rec_W.Visible = True 
     Case 5 
      Me.rec_R.Visible = True 
     Case 6 
      Me.rec_F.Visible = True 
     Case 7 
      Me.rec_Sat.Visible = True 
    End Select 
End Sub 
' Clear the current day selection box 
Public Sub clearDay() 
    Me.rec_Sun.Visible = False 
    Me.rec_Sat.Visible = False 
    Me.rec_M.Visible = False 
    Me.rec_T.Visible = False 
    Me.rec_W.Visible = False 
    Me.rec_R.Visible = False 
    Me.rec_F.Visible = False 
End Sub 
' Clear data from time Chart 
Public Sub clearTimeChart() 
    Dim arr As Variant 
    arr = Array("In", "Lunch_Out", "Lunch_in", "Lunch_total", "Out", "Day_total", "Paid_OT") 
    Dim x, y As Integer 
    For x = 1 To 7 
     For y = 0 To 6 
      weekDict.Item(x).Item(arr(y)).Value = "" 
     Next 
    Next 
End Sub 
' Initialize the weekly time chart control dictionary 
Public Sub initDict() 
    Dim dayDict 

    Set dayDict = CreateObject("Scripting.Dictionary") 
    dayDict.Add "In", Me.txt_Sun_in 
    dayDict.Add "Lunch_Out", Me.txt_Sun_LO 
    dayDict.Add "Lunch_in", Me.txt_Sun_LI 
    dayDict.Add "Lunch_total", Me.txt_Sun_LT 
    dayDict.Add "Out", Me.txt_Sun_out 
    dayDict.Add "Day_total", Me.txt_Sun_out 
    dayDict.Add "Paid_OT", Me.txt_Sun_OT 
    weekDict.Add 1, dayDict 
    Set dayDict = Nothing 

    Set dayDict = CreateObject("Scripting.Dictionary") 
    dayDict.Add "In", Me.txt_M_in 
    dayDict.Add "Lunch_Out", Me.txt_M_LO 
    dayDict.Add "Lunch_in", Me.txt_M_LI 
    dayDict.Add "Lunch_total", Me.txt_M_LT 
    dayDict.Add "Out", Me.txt_M_out 
    dayDict.Add "Day_total", Me.txt_M_out 
    dayDict.Add "Paid_OT", Me.txt_M_OT 
    weekDict.Add 2, dayDict 
    Set dayDict = Nothing 

    Set dayDict = CreateObject("Scripting.Dictionary") 
    dayDict.Add "In", Me.txt_T_in 
    dayDict.Add "Lunch_Out", Me.txt_T_LO 
    dayDict.Add "Lunch_in", Me.txt_T_LI 
    dayDict.Add "Lunch_total", Me.txt_T_LT 
    dayDict.Add "Out", Me.txt_T_out 
    dayDict.Add "Day_total", Me.txt_T_out 
    dayDict.Add "Paid_OT", Me.txt_T_OT 
    weekDict.Add 3, dayDict 
    Set dayDict = Nothing 

    Set dayDict = CreateObject("Scripting.Dictionary") 
    dayDict.Add "In", Me.txt_W_in 
    dayDict.Add "Lunch_Out", Me.txt_W_LO 
    dayDict.Add "Lunch_in", Me.txt_W_LI 
    dayDict.Add "Lunch_total", Me.txt_W_LT 
    dayDict.Add "Out", Me.txt_W_out 
    dayDict.Add "Day_total", Me.txt_W_out 
    dayDict.Add "Paid_OT", Me.txt_W_OT 
    weekDict.Add 4, dayDict 
    Set dayDict = Nothing 

    Set dayDict = CreateObject("Scripting.Dictionary") 
    dayDict.Add "In", Me.txt_R_in 
    dayDict.Add "Lunch_Out", Me.txt_R_LO 
    dayDict.Add "Lunch_in", Me.txt_R_LI 
    dayDict.Add "Lunch_total", Me.txt_R_LT 
    dayDict.Add "Out", Me.txt_R_out 
    dayDict.Add "Day_total", Me.txt_R_out 
    dayDict.Add "Paid_OT", Me.txt_R_OT 
    weekDict.Add 5, dayDict 
    Set dayDict = Nothing 

    Set dayDict = CreateObject("Scripting.Dictionary") 
    dayDict.Add "In", Me.txt_F_in 
    dayDict.Add "Lunch_Out", Me.txt_F_LO 
    dayDict.Add "Lunch_in", Me.txt_F_LI 
    dayDict.Add "Lunch_total", Me.txt_F_LT 
    dayDict.Add "Out", Me.txt_F_out 
    dayDict.Add "Day_total", Me.txt_F_out 
    dayDict.Add "Paid_OT", Me.txt_F_OT 
    weekDict.Add 6, dayDict 
    Set dayDict = Nothing 

    Set dayDict = CreateObject("Scripting.Dictionary") 
    dayDict.Add "In", Me.txt_Sat_in 
    dayDict.Add "Lunch_Out", Me.txt_Sat_LO 
    dayDict.Add "Lunch_in", Me.txt_Sat_LI 
    dayDict.Add "Lunch_total", Me.txt_Sat_LT 
    dayDict.Add "Out", Me.txt_Sat_out 
    dayDict.Add "Day_total", Me.txt_Sat_out 
    dayDict.Add "Paid_OT", Me.txt_Sat_OT 
    weekDict.Add 7, dayDict 
    Set dayDict = Nothing 
End Sub 
' Load settings into dictionary 
Public Sub initSettings() 
    Dim strSQL As String 
    Dim dbs As DAO.Database 
    Dim rs As DAO.Recordset 
    Set dbs = CurrentDb() 

    strSQL = "SELECT * FROM Settings WHERE ID=1;" 
    Set rs = dbs.OpenRecordset(strSQL) 
    If Not (rs.BOF And rs.EOF) Then 
     If rs.RecordCount <> 0 Then 
      settings.Add 1, rs![Salary] 
      settings.Add 2, rs![Dental] 
      settings.Add 3, rs![401K] 
      settings.Add 4, rs![Federal] 
      settings.Add 5, rs![Social_Security] 
      settings.Add 6, rs![Medicare] 
      settings.Add 7, rs![CT_tax] 
      settings.Add 8, rs![Work_day_goal_hrs] 
     End If 
    Else 
     Debug.Print "No Settings!" 
    End If 
End Sub 
' Get the control by object name 
Public Function getControl(ByVal ctlName As String) As Control 
    Dim ctl As Control 
    For Each ctl In Me.Controls 
     If ctl.Name = ctlName Then 
      Set getControl = ctl 
      Exit Function 
     End If 
    Next ctl 
End Function 

Public Sub initTextBoxEventHandler() 
    Dim eventHandler As TextBoxEventHandler 
    Set eventHandler = New TextBoxEventHandler 

    Set eventHandler.TextBox = Me.txt_Sun_in 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_Sun_LO 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_Sun_LI 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_Sun_out 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 

    Set eventHandler.TextBox = Me.txt_M_in 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_M_LO 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_M_LI 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_M_out 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 

    Set eventHandler.TextBox = Me.txt_T_in 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_T_LO 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_T_LI 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_T_out 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 

    Set eventHandler.TextBox = Me.txt_W_in 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_W_LO 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_W_LI 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_W_out 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 

    Set eventHandler.TextBox = Me.txt_R_in 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_R_LO 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_R_LI 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_R_out 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 

    Set eventHandler.TextBox = Me.txt_F_in 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_F_LO 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_F_LI 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_F_out 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 

    Set eventHandler.TextBox = Me.txt_Sat_in 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_Sat_LO 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_Sat_LI 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler.TextBox = Me.txt_Sat_out 
    txtBxCollection.Add eventHandler 
    Set eventHandler = Nothing 
    Set eventHandler = New TextBoxEventHandler 
    Set eventHandler = Nothing 

End Sub 
+1

Je * pense * Je comprends un peu cette question mais pas assez pour répondre. Vous avez créé une classe spéciale pour gérer l'événement d'une zone de texte, et parce que vous avez plusieurs zones de texte, vous avez créé une collection d'objets qui sont des instances de cette classe? C'est une technique valable parfois. Mais je ne comprends pas ce qu'est une zone de texte "étendue" et je ne comprends pas "appeler son nom de formulaire". Pouvez-vous poster du code, ou peut-être que le code est trop long à poster? Quoi qu'il en soit, vous pourriez être intéressé par cet article sur le traitement des tableaux d'objets qui soulèvent des événements http://vb.mvps.org/articles/ap200008.asp – MarkJ

+0

Extended signifie simplement que je suis ajouter plus de fonctionnalités à l'objet de contrôle de type interne par rapport à l'extérieur – Talguy

+0

Est-ce que vous programmez VBA dans Access ou dans VB6? La réponse à votre question sera complètement différente selon ce que vous utilisez. Je suppose que vous utilisez réellement Access et la programmation dans VBA, et dans cet esprit, il me semble que vous devriez utiliser un formulaire continu, car il semble que vous ayez un certain nombre de contrôles répétitifs dans les colonnes. Dans ce cas, vous n'avez pas besoin de les changer tous, car chacun est une instance d'un seul contrôle. –

Répondre

0

Hallo,

Il était agréable de voir votre tout projet - Je suis d'accord avec MarkJ - qui a dit que - dans VBA il n'y a aucune possibilité d'utiliser des événements dans les tableaux et aussi dans la collection - avec des collections et des événements je n'ai pas trop d'expérience - mais je lis à ce sujet - sur tableau s - J'ai passé toute la nuit - et découvert que VBA n'est pas C++ :(. Essayez de montrer tout le projet. Norbert

+0

Ajouté tout mon code pour revue – Talguy

+0

N'avez-vous pas donné des formes continues? Il éliminerait probablement presque tout votre code tout en fournissant presque toutes les mêmes fonctionnalités. –

Questions connexes