30岁菜鸟涛学习VB.net 第三天

双休2天,过的还不错。

今天是第3天了,主要任务就是vb.net里怎么实现多个winForm的切换。

suppose : 有2个winForm-->LoginForm, ListForm.功能是LoginForm-->ListForm.

那么怎么实现run program是默认init就是LoginForm,怎么实现点击loginForm button按钮,关闭loginForm然后切换到listForm呢。

这些问题都是今天要resolve的。

未完。。。

中午去办理房贷。 

 

首先解决怎么设置LoginForm为默认winForm。用visual studio2010 生成一个vb.net的winForm project时,会有个My Project文件夹。

在My Project --》Application.myapp 里可以看到

< ?xml version = " 1.0 "  encoding = " utf-16 " ? >
< MyApplicationData xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance "  xmlns:xsd = " http://www.w3.org/2001/XMLSchema " >
  
< MySubMain > true </ MySubMain >
   < MainForm > LoginForm </ MainForm >
  
< SingleInstance > false </ SingleInstance >
  
< ShutdownMode > 0 </ ShutdownMode >
  
< EnableVisualStyles > true </ EnableVisualStyles >
  
< AuthenticationMode > 0 </ AuthenticationMode >
  
< SaveMySettingsOnExit > true </ SaveMySettingsOnExit >

</MyApplicationData>

红色部分<MainForm>LoginForm</MainForm> 是默认winform,所以如果想修改默认值,就可以在Application.myapp 文件里去修改。

ok, 现在要解决winform 窗体切换问题,先看LoginForm里代码片段:

  Dim  listForm  As   New  ListForm
 listForm.Show()

 Me.Hide()

 看代码很容易,首先需要实例化一个ListForm,注意vb.net实例化的语法: New ListForm,当然也可以用New ListForm().

那为什么必须实例化一个ListForm对象出来呢。这时需要了解ListForm.vb里包含了一个ListForm.Designer.vb,如图:

  

这里面看看他里面的代码: Partial Class LoginForm Inherits System.Windows.Forms.Form

 PartialInherites。

 

Partial class:局部类型,可以有多个Partial。
 
  
Inherites:继承。
摘抄:
partial 类型可以使我们把对某个类的描述写在不同地方,甚至写到两个或多个不同的文件中去。partial 信息只对编译器有用,编译器在编译时看到对某个类的描述是“碎”的(partial 的),它会去其他地方收集该类的其他碎片,然后把所有的该类的碎片组合成完整的一个类,再对其编译。所以partial 体现不到编译好的 IL中去的。

可见,如果想使用LoginForm,就需要实例化Form对象,可是使用
'Dim listForm As New ListForm
 listForm.Show()   '不是使用的ListForm.show()

 

一样能把LoginForm显示出来,why,我认为vb.net的检查不是大小写敏感滴。那为什么没有实例化,listForm.show()也能显示呢?可能show()的方法源码里有实例化的过程。不知道怎么查看源码。5555.

在看下Me.Hide() 又有个语法Me,这个好理解就相当于java的this。就是一个指针。 

这时有个疑问:当使用Me.Close()时,不仅关闭了LoginForm,也关闭了ListForm,Why?这里是我的imagination:我认为winForm都是Inherites System.Windows.Forms.Form的,那么LoginForm 和 ListForm是不是都在一个System.Windows.Forms.Form线程里,如果使用Me.Close(),就是关闭了线程,这时内存里就没有LoginForm和ListForm的对象。而使用Me.Hide()时,线程是没有结束,LoginForm依然在内存中。

希望有专业的解释。

 Ok,今天的主要工作完成了。

明天开始连接数据库啦。初步想使用Nhibernate,吼起。。。

 

Persist 

 

 

 

转载于:https://www.cnblogs.com/jack_qin/archive/2011/04/18/2019636.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值