如何动态加载和卸载Form?

shibill 2003-10-15 04:20:07
工程中有两个窗体frm1,frm2,首先运行frm1,frm1上有一按钮button1,点button1希望运行frm2,同时关闭frm1,原来在VB6中用的是Load和UnLoad,转到VB.Net下不会了。
...全文
147 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
shibill 2003-10-22
  • 打赏
  • 举报
回复
究竟该怎么做呢?
starw2002 2003-10-20
  • 打赏
  • 举报
回复
用模块做sub main 在里面调用第一个窗体,在第一个窗体中调用第二个并且样关闭第一个窗体,程序不会结束
shibill 2003-10-17
  • 打赏
  • 举报
回复
不行啊,
Dim frm As New frmLog
frm.Show()
Me.Close()
新frm还没显示,本窗体已经关闭了,使用frm.hide可以,但是如果frm被关掉的话,应用程序没有结束。如何在多个窗体间反复切换,是应该hide,还是dispose呢?看上去很简单的一个问题,却搞不定。我觉得好像还是与application.run有关系,可试了一下,总是提示:
其他信息: 在单个线程上开始第二个消息循环是无效的操作。请改用 Application.RunDialog 或 Form.ShowDialog


yongtang 2003-10-17
  • 打赏
  • 举报
回复
dim frm as new form1

这时就调用了form1的构造函数,然后用frm.show()就可以显示form1了

要关闭原先的窗口可以使用close()方法。
shibill 2003-10-16
  • 打赏
  • 举报
回复
dim frm as new frm2
me.hide
frm.showdailog()
当关闭frm2时,整个应用程序并没有结束,如何同时关闭应用程序?
lzg530 2003-10-16
  • 打赏
  • 举报
回复
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
dim frm As new form
Me.close()
frm.show()
End Sub
shibill 2003-10-16
  • 打赏
  • 举报
回复
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Application.Run(New frmLog)
Me.Close()
Me.Dispose()
End Sub
Application.Run出现错误
其他信息: 在单个线程上开始第二个消息循环是无效的操作。请改用 Application.RunDialog 或 Form.ShowDialog
另外,我需要在多个窗体间反复切换,是应该hide,还是dispose呢,如何实现?
良朋 2003-10-16
  • 打赏
  • 举报
回复
to 上3楼
dim frm as new frm2
frm.showdailog(me)
me.dispose



shibill 2003-10-16
  • 打赏
  • 举报
回复
.Net升级向导做的太差了
menuasp 2003-10-16
  • 打赏
  • 举报
回复
如何关闭应用程序>关闭你的主窗体,其它窗体就都会关闭.用dispose
GinusAtCSDN 2003-10-16
  • 打赏
  • 举报
回复
给楼上:loginfrm.dispose()
给顶楼:在显示前要实例化
dim myfrm2 as new frm2 'myfrm2 是实例
'frm2 是你创建的:),在.net里不过是一个抽象的描述.
myfrm2.show()
myfrm2.hide()
……
良朋 2003-10-15
  • 打赏
  • 举报
回复
事实上也是大多数,我们是用一个Login登录窗体调用主窗体,主窗体运行后,登录窗体并没能真正释放! 这点很讨厌,有谁解决这一问题了?
lz305 2003-10-15
  • 打赏
  • 举报
回复
在VB6中,多个窗体之间可以很方便地互相调用,如:在Form1中,只需要用一条“Form2.Show” 语句就能显示窗体Form2。然而在VB.NET中窗体处理机制发生了很大的变化:在访问窗体之前,你必须进行窗体实例化;如果在项目中有多处代码访问同一窗体,则你必须把它的同一实例指针传递给这些代码,否则新创建的窗体实例就不再是原先的窗体了。
下面的代码实现窗体Form1和Form2之间互相调用,Form1为主窗体。Form1上的按钮BtnShowFrm2的标题为“显示Form2”,Form2上的按钮BtnShowFrm1的标题为“显示Form1”。

1、Form1中的代码:

Public Class Form1
Inherits System.Windows.Forms.Form
'创建Form2的一个新的实例
Dim Frm2 As New Form2()

Public Function Instance2(ByVal frm As Form2)
Frm2 = frm
End Function

Private Sub BtnShowFrm2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles BtnShowFrm2.Click
'以下语句保证在Form2以及其他窗体中访问Form1时,
'都将得到Form1的同一个窗体实例。
Frm2.Instance(Me)
Frm2.Show()
Me.Hide()
End Sub

End Class

2、Form2中的代码:

Public Class Form2
 Inherits System.Windows.Forms.Form
 Dim frm1 As Form1
 '借助一个新增的Instance属性来生成窗体frm1的实例
 Public Function Instance(ByVal frm As Form1)
  frm1 = frm
 End Function

 Private Sub BtnShowFrm1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles BtnShowFrm1.Click
  Me.Hide()
  frm1.Show()
 End Sub

 Private Sub Form2_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
  '如果Form2被关闭,则设置Form1的按钮BtnShowFrm2不可用。
  frm1.BtnShowFrm2.Enabled = False
  frm1.Show()
 End Sub
End Class

benlee 2003-10-15
  • 打赏
  • 举报
回复
加载
dim frm1 as new form()
application.run(frm1)

卸载
application.run(frm2)
frm1.close
csmmn3 2003-10-15
  • 打赏
  • 举报
回复
Sub Main()
dim frm1 as new form1()
dim frm2 as new form2()
if frm1.showdialog=dialogresult.ok then
application.run(frm2)
end if
End Sub

Button1_Click
me.dialogresult=ok
SammyXu 2003-10-15
  • 打赏
  • 举报
回复
在frm1中
dim frm as new frm2
me.hide
frm.showdailog()

16,550

社区成员

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

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