请问子窗体控制父窗体操作的问题

alsjust 2008-04-17 03:48:13
请问:
比如form1的一个变量time初始为100,然后在执行其他操作过程中虽timer1 tick自减,当time=60时form1中new 一个form2并show,且stop了timer1,然后在form2种点击按钮要hide form2 并重新start timer1 并使time从60开始继续随timer1 tick自减,要如何做?


谢谢
...全文
107 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
alsjust 2008-04-17
  • 打赏
  • 举报
回复
恩,谢谢,其实我也是这个做法,试验下来我原来的timer在form2操作后重新start了,但是我主窗体上的显示却停留在new form2时的数字,我想可能是我的主窗体上绘制的问题
yiyaoyao58958 2008-04-17
  • 打赏
  • 举报
回复
time=60时创建一个和原有窗体一样的窗体的代码是

窗体1

Public Class Form1
Dim time As Integer = 100

Dim frm2 As Form
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
time = time - 1

If time = 60 Then
frm2 = New Form2
frm2.Show()
Timer1.Stop()
End If
TextBox1.Text = time
End Sub

End Class



窗体2

Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Form1.Timer1.Start()
Me.Hide()
End Sub
End Class

yiyaoyao58958 2008-04-17
  • 打赏
  • 举报
回复
上面的代码是事先创建好窗体,在程序中显示

下面的代码是在time=60的时候创建一个新的窗体,并且显示

这两个代码我都试过,你可以直接使用

Public Class Form1
Dim time As Integer = 100

Dim frm2 As Form
Dim buton As Button = New Button

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Start()
AddHandler buton.Click, AddressOf buton_Click
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
time = time - 1

If time = 60 Then
buton.Text = "button"
frm2 = New Form
frm2.Show()
frm2.Controls.Add(buton)
frm2.Controls(0).Top = 50
frm2.Controls(0).Left = 50

Timer1.Stop()
End If
TextBox1.Text = time
End Sub
Private Sub buton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Timer1.Start()
frm2.Hide()
End Sub
End Class
alsjust 2008-04-17
  • 打赏
  • 举报
回复
谢谢yiyaoyao58958 ,我本来也是这么做的,但就是有问题,那你的代码贴到新的项目中发现是对的,于是在原来的程序里在time=0的时候设了一个提示,结果发现,form2执行回来,form1上的显示没变化,但一定时间后提示会出现,看来不是timer没启动,是显示没有重新执行的问题了,我要再看看,谢谢了
alsjust 2008-04-17
  • 打赏
  • 举报
回复
也就是说,涉及到父窗体对子窗体传值,子窗体对父窗体赋值并执行操作的问题
yiyaoyao58958 2008-04-17
  • 打赏
  • 举报
回复

窗体1的代码

Public Class Form1
Dim time As Integer = 100

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
time = time - 1
If time = 60 Then
Form2.Show()
Timer1.Stop()
End If
TextBox1.Text = time
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
End Class



窗体2的代码

Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Form1.Timer1.Start()
Me.Hide()
End Sub
End Class
alsjust 2008-04-17
  • 打赏
  • 举报
回复
谢谢楼上,不过没看清楚我的意思,并不是show form2的同时重新start timer1,而是form2 show了以后,在form2上操作,点击form2上的button1,使form1的timer重新start,主要是这个问题
hfwang009 2008-04-17
  • 打赏
  • 举报
回复
你把90改成60就是你想要的
hfwang009 2008-04-17
  • 打赏
  • 举报
回复
我用的是c#不过原理一样:
private void timer1_Tick(object sender, EventArgs e)
{
time--;
textBox1.Text = time.ToString();
if (time == 90)
{
timer1.Stop();
Form2 frm = new Form2();
frm.ShowDialog();
timer1.Start();
}
}

16,717

社区成员

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

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