求助大神,两个窗体如何自动切换?

天天三公里 2020-08-12 09:27:55
Private Sub form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim timer1 As New Timer
timer1.Enabled = True
timer1.Start()
timer1.Interval = 300

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Me.Hide()
Form2.Show()
End Sub

我的这串代码,没反应
...全文
7808 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这几年,不需要使用定时器等等机制,应该直接使用 Task 框架机制编程。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Public Async Sub 过一会儿切换(f As System.Windows.Forms.Form, seconds As Integer)
Await Task.Delay(TimeSpan.FromSeconds(seconds))
f.Show()
f.Activate()
End Sub
End Class
天天三公里 2020-08-16
  • 打赏
  • 举报
回复
引用 10 楼 以专业开发人员为伍 的回复:
这些年的 .net 已经大量支持异步编程设计,所以现在也就没有什么理由去改变,而是要充分使用这种框架来淘汰许多早先非常繁琐的设计了。 例如上面的例子,当点击模态对话框的“确认”按钮之后,3秒钟发呆的时候,主线程(UI线程)丝毫没有被卡死,可以用鼠标随便拖动来测试。这并不用在Form1去使用什么定时器,使用 Task 编程框架机制可以在任意地方、任意频繁地进行异步多线程编程,(其它)编程技术运用范围非常广泛。可以说 Task 是一个技术分水岭、里程碑式的知识。
感谢大佬指点,我一年前因为工作,自学了vb6,然后大半年没整过了,现在工作上有个idea需要编程展示,我就等于我的基础本身是建立在沙堆上,经过大半年,我都忘记的差不多了额,这两天买了点vb.net的基础教程,准备下功夫把基础打好
天天三公里 2020-08-16
  • 打赏
  • 举报
回复
引用 1 楼 tengwei6328 的回复:
你的这个代码问题太多了。 1.timer1 是局部变量 2.Timer1_Tick 也少了Handles语句 改了一下,拿去玩:

Public Class Form1

    Dim WithEvents timer1 As New Timer

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

        timer1.Interval = 3000
        timer1.Enabled = True

    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles timer1.Tick

        If Me.Visible Then

            Me.Hide()
            Form2.Show()

        Else

            Form2.Hide()
            Me.Show()

        End If
    
    End Sub
     
End Class
大佬出现个问题,窗体1,窗体2,1切到2正常,在2里面写了改变一下同样的代码,切不回1啊
  • 打赏
  • 举报
回复
这些年的 .net 已经大量支持异步编程设计,所以现在也就没有什么理由去改变,而是要充分使用这种框架来淘汰许多早先非常繁琐的设计了。

例如上面的例子,当点击模态对话框的“确认”按钮之后,3秒钟发呆的时候,主线程(UI线程)丝毫没有被卡死,可以用鼠标随便拖动来测试。这并不用在Form1去使用什么定时器,使用 Task 编程框架机制可以在任意地方、任意频繁地进行异步多线程编程,(其它)编程技术运用范围非常广泛。可以说 Task 是一个技术分水岭、里程碑式的知识。
  • 打赏
  • 举报
回复
另外,所谓“切换”要有一个合理的流程来处理现实需求,要考虑到切换的完整的“结束”动作。例如
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Public Async Function 过一会儿切换(f As System.Windows.Forms.Form, seconds As Integer) As Task
Await Task.Delay(TimeSpan.FromSeconds(seconds))
f.Show()
f.Activate()
End Function

Private Async Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
MsgBox("按确认之后,过3秒钟将打开Form2")
Dim f As New Form2
AddHandler f.FormClosed, Sub()
Me.Close()
End Sub
Await 过一会儿切换(f, 3)
Me.Hide()
End Sub
End Class
清风不拂面 2020-08-14
  • 打赏
  • 举报
回复
2楼的回答正确
清风不拂面 2020-08-14
  • 打赏
  • 举报
回复
调整窗体form2的方法与vb6不同,要先建立一个实例,再show dim frmNew as new form2 frmNew.show 还有一些问题: timer1.Enabled = True timer1.Start() timer1.Interval = 300 这里的前后要修改一下 timer1.Interval = 300 timer1.Enabled = True 另外, timer1.Start()不必使用。
天天三公里 2020-08-14
  • 打赏
  • 举报
回复
引用 2 楼 贵阳老马马善福专业维修游泳池堵漏防水工程的回复:
不如一个窗体,两个panel,通过设置visible来回切换
好的、我研究一下
天天三公里 2020-08-14
  • 打赏
  • 举报
回复
引用 1 楼 tengwei6328的回复:
你的这个代码问题太多了。 1.timer1 是局部变量 2.Timer1_Tick 也少了Handles语句 改了一下,拿去玩:

Public Class Form1

    Dim WithEvents timer1 As New Timer

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

        timer1.Interval = 3000
        timer1.Enabled = True

    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles timer1.Tick

        If Me.Visible Then

            Me.Hide()
            Form2.Show()

        Else

            Form2.Hide()
            Me.Show()

        End If
    
    End Sub
     
End Class
感谢大佬
123工艺品 2020-08-14
  • 打赏
  • 举报
回复

两个窗体切换?
代码中只切换了一个窗体呀
threenewbee 2020-08-13
  • 打赏
  • 举报
回复
不如一个窗体,两个panel,通过设置visible来回切换
tengwei6328 2020-08-13
  • 打赏
  • 举报
回复
你的这个代码问题太多了。 1.timer1 是局部变量 2.Timer1_Tick 也少了Handles语句 改了一下,拿去玩:

Public Class Form1

    Dim WithEvents timer1 As New Timer

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

        timer1.Interval = 3000
        timer1.Enabled = True

    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles timer1.Tick

        If Me.Visible Then

            Me.Hide()
            Form2.Show()

        Else

            Form2.Hide()
            Me.Show()

        End If
    
    End Sub
     
End Class

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧