隐藏窗体Visible再设置为可见时两种不同结果
父窗体中(fparent)打开子窗体,自身不可见
Dim f As New fchild
f .Show()
Me.Visible = False
子窗体中 (fchild)
Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
fparent.text ="test"
fparent.Visible = True
Me.Close()
End Sub
现在问题是fparent.text ="test" 有时候可以接收到 有时候不行。 调试发现无法接收到参数的隐藏窗体好像已经关闭,执行fparent.Visible = True 时重新执行了父窗体的Handles MyBase.Load。而可以接收参数的 不需要执行Handles MyBase.Load
不知道什么原因
[解决办法]
Dim f As New fchild
f .Show()
Me.Visible = False
你只是new一个临时变量,哪来的父子关系呢?
[解决办法]
利用.showdialog更方便
[解决办法]
不然把me.close改为me.hide
[解决办法]
因为fparent是类名而不是实例引用
这样的话你操作的实际上是框架后台给你创建的“某个”fparent类型的实例
这个实例不是永久不变的,框架会在适当的情况下销毁它然后在需要的时候重新创建另外一个实例
像你说的,重新触发了Form_Load事件就说明创建了一个新的窗口,这样你设置的fparent.Text="test"设置的是“上一个”窗口,而那个窗口已经被销毁了。
建议不要使用这种通过类名来操作某个内部实例的方法
[解决办法]
Inherits System.Windows.Forms.Form '加此条,像VB6一样操作窗体,使.SHOW 等可用,不用实例化,而使用默认值。尽情的用
不要关闭只要HIDE 和 show
且可以在关闭按钮上加代码,控制不关闭,只HIDE
[解决办法]
这样写试试:
第一个窗体中:(fparent)
Dim f As New fchild
Me.Hide()
f .ShoDialog()
Me.Show()
第二个窗体中:(fchild)
Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
fparent.text ="test"
Me.Close()
End Sub