这些天比较忙,进度一直不是很理想(其实这些都是托词,没有做好时间管理。)六天敲了8个窗体,脑子很乱,没有一条主线路。这样是很危险的!
当对整个系统没有宏观把控的时候,停下来,是为了大踏步的前进!我冷静,冷静再冷静。。。重新画了两张图,我才发现,写程序,不仅仅是算法和结构,最灵魂的东西——思想。也是大多程序员都难以具备的工匠精神。
这张图是整个上机的流程图,基本上概括了各个窗体和各种权限的用户的操作。我先敲完了跟学生信息管理系统一模一样的地方,比如说修改密码、单一条件的查询窗体、罗列数据等。接下来就打算按照上机流程图来敲。
这张图是各个窗体要运用的表。其实机房收费系统是升级版的学生信息管理系统。其中,会接触一些新的内容,比如:联合查询,导出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
我想难道是我换错了爹了么。。于是就对代码进行了如下的调整:
Private Sub Register_Click() '注册窗体show在图片框内 SetParent frmRegister.hWnd, Picback.hWnd End Sub
换爹失败,乱上添乱,我又返回到上一步的代码,还是“只允许一个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>
通过这两件事情,我深刻的体会到了大道至简的道理。遇到了问题→简单化→找到根源→解决!!!就这么简单。还有一点,永远不要依赖别人去帮你调代码,你自己敲的东西,自己最了解,如果你都不认识它了,别人也束手无策。