如何在此按钮上添加当前日期和时间单击 windows 表单

How to add current date and time on this button click on windows form

我正在使用 windows 表单应用程序并在表单加载时动态创建一些控件。

创建的控件有 Label、UltraDateTimeEditor 和 Button。

我正在使用下面的代码来实现它。

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim n = 5
    For i As Integer = 0 To n - 1
        'Create label
        Dim label As New Label()
        label.Text = [String].Format("Label {0}", i)
        'Position label on screen
        label.Left = 50
        label.Top = (i + 1) * 30
        label.Width = 70

        'Create UltraDateTimeEditor
        Dim dtpicker = New UltraDateTimeEditor
        dtpicker.Name = "Date" + i.ToString()
        dtpicker.MaskInput = "{date} hh:mm"
        dtpicker.MaskDisplayMode = MaskMode.IncludeBoth
        dtpicker.SpinButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle.Always
        dtpicker.Left = 120
        dtpicker.Top = (i + 1) * 30




        Dim button As New Button()
        'Position textbox on screen
        button.Text = "Now"
        button.Left = 290
        button.Top = (i + 1) * 30
        'Add controls to form
        Me.Panel1.Controls.Add(label)
        Me.Panel1.Controls.Add(dtpicker)
        Me.Panel1.Controls.Add(button)
    Next

End Sub

画面是这样的

现在,当单击相应日期时间编辑器旁边的现在按钮时,我需要将当前日期和时间放入相应的日期时间编辑器中。 请建议我该怎么做。

要获取当前 DateTime,只需使用以下两个属性之一(取决于您的用例):

DateTime.Now
DateTime.UtcNow

然后一旦你有了当前的 DateTime,你就可以将控制显示 DateTime 的 UltraDateTimeEditor.Value 属性 设置为 之一现在 个属性。

要为每个按钮分配一个 EventHandler,您需要创建一个 Sub 来处理特定按钮的 .Click 事件。但是,为了做到这一点,我们首先必须将按钮声明移到 Form Load 事件本地范围之外。

Dim button(5) As Button
Dim dtpicker(5) As UltraDateTimeEditor

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For i As Integer = 0 To n - 1
    'Create label
    Dim label As New Label()
    label.Text = [String].Format("Label {0}", i)
    'Position label on screen
    label.Left = 50
    label.Top = (i + 1) * 30
    label.Width = 70

    'Create UltraDateTimeEditor
    dtpicker(i) = New UltraDateTimeEditor
    dtpicker(i).Name = "Date" + i.ToString()
    dtpicker(i).MaskInput = "{date} hh:mm"
    dtpicker(i).MaskDisplayMode = MaskMode.IncludeBoth
    dtpicker(i).SpinButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle.Always
    dtpicker(i).Left = 120
    dtpicker(i).Top = (i + 1) * 30

    button(i) = New Button()
    'I assigned the index to the name so we can handle all 5 buttons with one event handler
    button(i).Name = i.ToString()
    'Position textbox on screen
    button(i).Text = "Now"
    button(i).Left = 290
    button(i).Top = (i + 1) * 30
    'Add controls to form
    Me.Panel1.Controls.Add(label)
    Me.Panel1.Controls.Add(dtpicker(i))
    Me.Panel1.Controls.Add(button(i))
Next
End Sub

现在是按钮的事件处理程序代码。这将处理所有 5 个按钮

Private Sub Buttons_Click(sender As Object, e As EventArgs) Handles buttons(0).Click, buttons(1).Click, buttons(2).Click, buttons(3).Click, buttons(4).Click
    Dim button As Button = DirectCast(sender, Button)
    dtpicker(CInt(button.Name)).Value = DateTime.Now
End Sub

这里我们访问相关UltraDateTimeEditor数组元素的索引,并将其.Value 属性设置为当前DateTime

您可以使用 Label、DatePicker 和 Button 作为包含控件创建一个 UserControl,然后处理 UserControl 中的按钮事件,将 DateTime.Now 值分配给 UserControl 中的 DatePicker。

然后用新 UserControl 实例的创建替换您的原始代码。

您将需要 UserControl 的属性,即实例中的按钮文本和标签。

您可以将 AddHandler 用于 Button 的动态控件,这样当它们被点击时您可以 运行 一些代码...请注意:AddHandler部分...

代码已经过测试

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim n = 5
        For i As Integer = 0 To n - 1
            'Create label
            Dim label As New Label()
            label.Text = [String].Format("Label {0}", i)
            'Position label on screen
            label.Left = 50
            label.Top = (i + 1) * 30
            label.Width = 70

            Dim dtpicker = New UltraDateTimeEditor
            dtpicker.Name = "Date" + i.ToString()
            dtpicker.MaskInput = "{date} hh:mm"
            dtpicker.MaskDisplayMode = MaskMode.IncludeBoth
            dtpicker.SpinButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle.Always
            dtpicker.Left = 120
            dtpicker.Top = (i + 1) * 30
            dtpicker.Tag = i 'Set this as we will use this for comparison



            Dim button As New Button()
            'Position textbox on screen
            button.Text = "Now"
            button.Tag = i 'Set this as we will use this for comparison
            button.Left = 290
            button.Top = (i + 1) * 30
            'Add controls to form
            Me.Controls.Add(label)
            Me.Controls.Add(dtpicker)
            Me.Controls.Add(button)

            AddHandler button.Click, AddressOf UpdateTime

        Next

    End Sub

此方法处理更改 DateTime 对象...我们使用 Button.Tag 属性 并根据 DateTime.Tag 检查它。然后我们可以设置与 Button.

关联的时间
Private Sub UpdateTime(sender As System.Object, e As System.EventArgs)
        Dim nButton As Button = DirectCast(sender, Button)
        If nButton IsNot Nothing AndAlso nButton.Tag >= 0 Then
            For Each ctrl In Me.Controls.OfType(Of UltraDateTimeEditor)()
                If ctrl.Tag = nButton.Tag Then
                    ctrl.Value = DateTime.UtcNow
                    Exit Sub
                End If
            Next
        End If

    End Sub