vb.net失踪:VB.NET的旅(一)—失踪的窗体

  很久没有新作架不住朋友们询问和追问只得拿些旧作来补上近日没空写作不足惭愧ing!这系列和Henry手记系列区别个角色形式情景故事最初发表于计算机世界适用于VB.net初学者老鸟们就不用在我这系列文章上浪费时间了我希望自己有时间以后能不断继续这系列文章加入大量工程解决方案同时Henry手记也会继续写下去以回报长期以来支持我所有朋友

  背景:我叫Henry刚从大学计算机专业毕业新加入索易公司.NET开发小组;负责带我头目是大李.NET高手是个幽默又有耐心家伙;老白是我们部门头头经常带给我们古怪又难缠需求

  第天上班白经理就带着我去.NET技术小组报到“大李这是新来同事你要多帮帮他”老白指着我对个眼镜后面透着闪闪目光年轻人说

  “没问题他会做得很好”大李难道会看相不成?还是人家客气呀?不管了我只要自己努力就对了

  20分钟后我已经在分配给我台P4电脑WindowsXP平台下打开了Visual Studio.NET集成编译环境(IDE)开始欣赏了个多漂亮编译环境呀可以自选使用时风格是VB6还是VC6我选择是RAD性能好VB6风格

  “你刚开始接触.NET在系统培训的前先加深点印象看看VB.NET和VB6有什么区别吧你创建两个窗体每个窗体上各有个按钮点击时隐藏其所在那个窗体切换出另个窗体来”大李声音在耳边响起打断了我对IDE欣赏但他提要求也太简单了吧在VB6中只需要两句写在按钮单击响应中语句就行了:

  两个窗体:Form1和Form2Form1上按钮为: Command1Form2上按钮为: Command2

Private Sub Command1_Click
  Me.Hide
  Form2.Show
End Sub
 Private Sub Command2_Click
  Me.Hide
  Form1.Show
End Sub


  于是我毫不犹豫地在VS.NET中内开始我个VB.NET项目了首先新建了个VB.NETWindows应用项目自动生成了个Windows Form:Form1在其上加入个按钮Control控件:Button1;然后添加了个Windows Form:Form2在其上加入了个按钮Control控件:Button2

  在设计窗口双击Button1后编译器会切换到代码窗口Button1单击响应代码中

  在代码段中故计重施当我想写Form2.Show时在Form2的后打个点出现智能感知菜单中却没有Show这思路方法真奇怪这如何可能?难道VB.NET改动有这么大我抬头看了看站在我身旁大李

  大李立刻面露微笑看来是正中他圈套他手指向屏幕点了点Form1中代码开头处:

Public Class Form1
    Inherits .Windows.Forms.Form


  不笨我立刻就明白了现在Form1是个从.Windows.Forms.Form继承下来类了时候当然需要先例子化了也不难嘛马上动手:

Private Sub Button1_Click(ByVal sender As .Object, _
 ByVal e As .EventArgs) Handles Button1.Click
Me.Hide
        Dim frm2 As New Form2 ‘例子化Form2类得到个对象
frm2.Show
End Sub


  在Form2Button2单击事件中也相似地写了段代码运行和VB6效果差不多了正在得意中大李走过来在我Form1中添加了个文本框textbox1清空其中文字然后运行了在运行中他在文本框里写了几个字:“Henry作品”然后点击Button1切换到Form2接着点击Button2重新出现Form1文本框中却变成了空白

  “这……”我时语塞慢慢地想起点什么“应该是通过New构造思路方法每次点击按钮都会重新例子化次Form类吧?所以每次重新出现窗体都不是以前曾经出现过那个那以前窗体也就失踪了调不出来了

  “失踪?”大李不禁笑了起来“对呀失踪在内存中你每例子化系统就会开辟块内存给个对象并会有相应线程对其进行控制和管理如果作为进程中主线程个Form1被Hide起来没有关闭它那么即使你关闭后来新创建所有窗体进程也不会被中止那么用什么思路方法去找回你失踪窗体或者说如何样就只使用个对象不再每次例子化呢?”

  “全局对象!”我脱口而出感觉到大李不置可否只好硬着头皮继续说:“利用全局变量使Form1和Form2只例子化这样就可以了

  然后在大李注视下我开始实施我计划:

  再创建个模块文件:module1.vb并且同时在:

  解决方案管理器-〉项目名.sln -〉右点鼠标 -〉属性 -〉通用属性->常规->启动对象 -〉改为Module1启动后先运行Module1中代码指令然后编写代码如下:

'Module1.vb
Module Module1
    Public frm1 As New Form1  ‘定义Form1公用变量例子
    Public frm2 As New Form2 ‘定义Form1公用变量例子
    Sub Main
        Application.Run(frm1) ‘这句话表明启动了modele后会接下来运行frm1,即form1个例子
      主线程就成为运行期frm1了
    End Sub
End Module




  这样frm1、frm2就成为全局变量了在Button1和Button2单击响应代码中只要写:frm1.show就可以了

  再运行可以了“Henry作品”直都会保持在Form1中文本框里

  大李老哥没等我欢笑起来就再次出手在frm1隐藏起来时候关闭了Form2窗口(frm2例子)桌面上什么窗体都没有了进程又次被陷入在无法中止情况下My God面向对象VB.NET爱你难道真这么难……



Tags:  vb.net失踪

延伸阅读

最新评论

发表评论