Avatar of Ryan Ragan
Ryan Ragan
Flag for United States of America asked on

1 Event Handler for multiple DateTimePickers - Not working for me???

Good morning, I have a Windows Form (vb.net) and I am dynamically creating multiple DateTimePicker controls. The number of controls depends on how many employees are currently registered in the database. So for each employee they get a start and end time control for their schedule. I have read multiple articles and solutions and I am simply stuck. I need 1 handler to fire anytime a timepicker value is changed. Once the value is changed, the textbox next to it will show the timespan in hours that will be added to the schedule...

Any help would be great
Dim DateTimePicker As New DateTimePicker
                DateTimePicker.Name = "Start" & counter
                DateTimePicker.Size = New Size(80, 25)
                DateTimePicker.Location = New Point(Combo2.Location.X + 135, Combo2.Location.Y)
                DateTimePicker.ShowUpDown = True
                DateTimePicker.Value = "1/1/2018 06:00 AM"
                DateTimePicker.Format = DateTimePickerFormat.Custom
                DateTimePicker.CustomFormat = "hh:mm tt"
                Me.Panel2.Controls.Add(DateTimePicker)

                Dim DateTimePick As New DateTimePicker
                DateTimePick.Name = "End" & counter
                DateTimePick.Size = New Size(80, 25)
                DateTimePick.Location = New Point(DateTimePicker.Location.X + 90, DateTimePicker.Location.Y)
                DateTimePick.ShowUpDown = True
                DateTimePick.Value = "1/1/2018 12:00 PM"
                DateTimePick.Format = DateTimePickerFormat.Custom
                DateTimePick.CustomFormat = "hh:mm tt"
                Me.Panel2.Controls.Add(DateTimePick)
AddHandler DateTimePick.ValueChanged, AddressOf DateTimePicker2_ValueChanged

Open in new window


Private Sub DateTimePicker2_ValueChanged(ByVal sender As Object, ByVal e As EventArgs)
        Try
            Dim cControl As Control
            Dim counter As Int32 = 0
            Dim cControl2 As Control
            For Each cControl In Me.Panel2.Controls
                If TypeOf cControl Is DateTimePicker Then
                    counter += 1
                    If cControl.Name = "Start" & counter Then
                        Dim StartTime As DateTime = cControl.Text
                        If cControl.Name = "End" & counter Then
                            Dim EndTime As DateTime = cControl.Text
                            Dim Duration As TimeSpan = EndTime - StartTime
                            Dim Duration2 = Duration.TotalHours
                            For Each cControl2 In Me.Panel2.Controls
                                If TypeOf cControl2 Is TextBox And cControl2.Name = "Hours" & counter Then
                                    cControl2.Text = Duration2
                                End If
                            Next
                        End If
                    End If
                End If
            Next
        Catch ex As System.Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

Open in new window

Visual Basic.NET.NET Programming

Avatar of undefined
Last Comment
Éric Moreau

8/22/2022 - Mon
Éric Moreau

you need to add 1 AddHandler for each controls and I only see 1.

Also, you are running for troubles if you declare a variable the same name as a control (Dim DateTimePicker As New DateTimePicker).
Ryan Ragan

ASKER
Thank you for responding, do you have any suggestions on handling an unknown # of DateTimePickers.valuechanged that are dynamically loaded at runtime? All I want is to show the timespan between two datetimepickers when the value is changed. The issue is each employee gets a start and end time so a schedule can be mass produced. Thank you for any other suggestions,

Ryan
ASKER CERTIFIED SOLUTION
Éric Moreau

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck