Vb.net 以编程方式添加窗体和控件

Vb.net 以编程方式添加窗体和控件,vb.net,forms,Vb.net,Forms,我有以下代码; 我以编程方式添加了第二个窗体和控件,但计时器在第二个窗体中工作不正常; 当然,它在主要形式中工作正常; 我需要帮助在第二种形式中做与我在主要形式中做的完全相同的事情; 提前感谢您的帮助 Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim frmNew As New Form frmNe

我有以下代码; 我以编程方式添加了第二个窗体和控件,但计时器在第二个窗体中工作不正常; 当然,它在主要形式中工作正常; 我需要帮助在第二种形式中做与我在主要形式中做的完全相同的事情; 提前感谢您的帮助

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim frmNew As New Form
        frmNew.Visible = True
        Dim Label2 As New Label()
        frmNew.Controls.Add(Label2)
        Label2.Name = "Label1"
        oTimer = New System.Windows.Forms.Timer
        oTimer.Interval = 1000
        oTimer.Enabled = True
        oTimer.Start()
        frmNew.Text = Date.Now
        Label2.Text = Date.Now
    End Sub
    Private WithEvents oTimer As System.Windows.Forms.Timer
    Private Sub timerTicks() Handles oTimer.Tick
        Me.Text = Date.Now
        label1.text = Date.Now
        'frmNew.Text = Date.Now
        'frmNew.Label2.Text = Date.Now
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    End Sub
End Class

您需要以某种方式将对表单和标签的引用传递到计时器的Tick()事件中。这里有一种方法:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim frmNew As New Form
        Dim Label2 As New Label()
        frmNew.Controls.Add(Label2)
        Dim tmr As New System.Windows.Forms.Timer
        AddHandler tmr.Tick, AddressOf tmr_Tick
        tmr.Tag = New Tuple(Of Control, Control)(frmNew, Label2)
        tmr.Interval = 1000
        tmr.Start()
        frmNew.Text = Date.Now
        Label2.Text = Date.Now
        frmNew.Show()
    End Sub

    Private Sub tmr_Tick(sender As Object, e As EventArgs)
        Dim T As Tuple(Of Control, Control) = DirectCast(DirectCast(sender, System.Windows.Forms.Timer).Tag, Tuple(Of Control, Control))
        Dim frm As Form = DirectCast(T.Item1, Form)
        Dim lbl As Label = DirectCast(T.Item2, Label)
        Dim curTime As String = DateTime.Now.ToString("h:mm:ss tt")
        frm.Text = curTime
        lbl.Text = curTime
    End Sub

End Class

frmNew中没有计时器滴答声事件
timerticks
是Form1的私有项,因此frmNew(及其控件)可以使用它。您也没有将计时器添加到Form2为什么不设计并显示此表单?一个空白的新表单具有所有默认值,看起来不如您设计的表单;您能告诉我如何:“在frmNew中添加一个计时器滴答事件。timerticks是Form1的私有项,因此frmNew(及其控件)可以使用它。”,请?提前谢谢。你好,非常感谢你的帮助;最后一个问题,如果我运行代码;我得到了显示秒数的frm.文本;但是lbl.Text只显示月份和日期;有没有一种方法可以显示lbl的时、分、秒?太好了;谢谢你的心;我厌倦了“投票”;但不允许,因为我需要达到15级或以上;对不起。我真的很感谢你的帮助。