菜鸟涛

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

双休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 

 

 

 

posted on 2011-04-18 11:02  菜鸟涛  阅读(479)  评论(1编辑  收藏  举报