机房收费系统 Part Two——敲机房收费,悟大道至简

    这些天比较忙,进度一直不是很理想(其实这些都是托词,没有做好时间管理。)六天敲了8个窗体,脑子很乱,没有一条主线路。这样是很危险的!

    当对整个系统没有宏观把控的时候,停下来,是为了大踏步的前进!我冷静,冷静再冷静。。。重新画了两张图,我才发现,写程序,不仅仅是算法和结构,最灵魂的东西——思想。也是大多程序员都难以具备的工匠精神。


机房收费系统 Part Two——敲机房收费,悟大道至简_第1张图片


    这张图是整个上机的流程图,基本上概括了各个窗体和各种权限的用户的操作。我先敲完了跟学生信息管理系统一模一样的地方,比如说修改密码、单一条件的查询窗体、罗列数据等。接下来就打算按照上机流程图来敲。


机房收费系统 Part Two——敲机房收费,悟大道至简_第2张图片


    这张图是各个窗体要运用的表。其实机房收费系统是升级版的学生信息管理系统。其中,会接触一些新的内容,比如:联合查询,导出Excel表,报表等。一定要从熟悉的地方入手,一点点去了解和熟悉新的内容。

    以上我从全局的角度分析了整个系统,这就是所谓的大道至简。这个系统搞得这么复杂了,就是因为没有抓住程序的Keyword。如果没有认清这个程序的本质,没有抓住关键,反而会作茧自缚。越来越烦,越来越乱。最终的结果就会导致寸步难行。所谓大道至简,就是一两句话就能说明白的。


    昨天深陷入一个问题,不能自拔、、其实事情没有那么复杂,就是自己制作出了一种纷繁复杂的感觉,结果越陷越深,不能自拔了。多亏了赵崇大神指点,否则像我这样的倔脾气一定又是撞到头破血流的也不知道回头。。


    问题是用Setparent函数解决MDI窗体不能show出子窗体。

    当我们需要在MDI窗体上添加控件的时候,就需要借助一个容器(如Picture控件),这时问题来了,MDI窗体终于可以添加控件了,但是子窗体们怎样也show不出来了。看了杨建同桌的博客(机房收费系统问题(一)MDI子窗体不显示),我就用上了Setparent函数。

    第一步,在模块中引用API函数

Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

               函数功能:改变某个子窗口的父窗口(通俗点讲就是给孩儿换个爹。。)

    函数参数:hWndChild:子窗口句柄

             hWndNewParent:新的父窗口句柄


    第二步,给孩儿换爹

Private Sub Register_Click()
'注册窗体show
    SetParent frmRegister.hWnd, frmMain.hWnd
End Sub

              自认为这次一定可以Show出来了,结果出现了这样的问题:

机房收费系统 Part Two——敲机房收费,悟大道至简_第3张图片


    我想难道是我换错了爹了么。。于是就对代码进行了如下的调整:

Private Sub Register_Click()
'注册窗体show在图片框内
    SetParent frmRegister.hWnd, Picback.hWnd
End Sub

               然后有意思的事情发生了,当我把爹换成了Picture控件,当卸载任何子窗体的时候,VB就疯了。。。

机房收费系统 Part Two——敲机房收费,悟大道至简_第4张图片

    换爹失败,乱上添乱,我又返回到上一步的代码,还是“只允许一个MDI窗体的问题。”


    我请赵崇大神帮我看问题,他把我觉得有问题的代码单拿出来又敲了一个工程,结果运行没有问题,所以还是我其他的地方有问题。在这,通过大神这个行为,我学到了当觉得哪段代码有问题的时候,单独拿出来实现,将问题简单化!如果总把问题想的很复杂,你会被自己写的程序搞死的!这不也体现了大道至简的道理嘛???


    通过看大牛们的博客,解决方法是将工程的启动对象设置成登录窗体,我想这并不是解决问题的根本方法。不过这给了我很大的启示!他这一步的操作就不会报错误了,绕过了Sub Main 过程,证明问题就在Sub Main过程当中!!!

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>Sub main()

    Dim fLogin As New frmLogin       '类类型变量
    fLogin.Show vbModal              '显示登陆窗体实例
    
    If Not fLogin.OK Then            'OK为fmainform类的成员
    
        End                          '登陆失败,则停止运行
        
    End If
    Unload fLogin
    
    Set fMainForm = New frmMain      '登陆成功后,创建主窗体
    fMainForm.Show                   '显示主窗体
        
End Sub</strong></span>

       其中有一句登陆成功后创建主窗体实例,这个frmMain就是我的MDI窗体,这句代码是再创建一个MDI窗体,所以报了上面的错误(出现多个MDI窗体),于是我就直接登陆成功后show frmMain,不搞得那么复杂了,果然,成功了。

 

     通过这两件事情,我深刻的体会到了大道至简的道理。遇到了问题→简单化→找到根源→解决!!!就这么简单。还有一点,永远不要依赖别人去帮你调代码,你自己敲的东西,自己最了解,如果你都不认识它了,别人也束手无策。

你可能感兴趣的:(sql,vb,机房收费系统)