第一次机房收费系统--MDI主窗体与子窗体的显

前言:

之前对MDI窗体的认识不够深刻,所以建窗体的时候就决定试试:没有把主窗体建成MDI窗体,使用的是普通窗体,于是乎,昨天开师徒会的时候就和师傅谈论了这个问题,师傅提出了一点我之前没有注意到的问题:如果不是MDI窗体的话,打开主窗体和子窗体,然后关闭主窗体,会发现子窗体并没有关闭。这就相当于我们用一个程序时,程序已经关闭了,但是发现有一个小的功能还处于开着的状态,瞬间觉得很滑稽!不过我也算是不到南墙心不死了,只有真正地试过了才知道哪个是正确的,正确的理由是什么,才能从心里真正地接受它!

下面就是在改正的过程中遇到的一系列的问题,列举出来和大家共同进步!

 

MDI窗体

MDI就象一个主界面,它一般带有菜单。里面又可以建立多个子窗口,就象WORD里面打开很多个文档,这些文档可以进行层叠、平铺等各种操作;子窗口可以在MDI主窗口区域内定位、改变大小、最大化和最小化,当最大化子窗口时,它将占满MDI 主窗口的全部客户区。当MDI窗口最小化的时候所有子窗口随之最小化。

一个程序的主界面一般都是MDI窗口。效果如图:



添加picture

新建一个MDI窗体,准备把原来主窗体的东西直接复制到MDI窗体内,但是出现了如下一系列的问题:


经上网查证后发现原来MDI窗体是不可以这样插入控件的,必须把控件插入到picture控件之上,然后这个问题就解决了!

 

子窗体不见了

但是运行之后发现,子窗体不见了,它去哪了呢,明明是运行状态的!后来发现,原来,它躲在了主窗体的图片后面,那么就需要把它拿出来啦!

此时就需要用到API函数了

1.选择外接程序--外接程序管理器--选中VB 6API Viewer,勾中加载行为的前两项


2.再次点击外界程序--API浏览器--选择文件--加载文本文件


3.进行如下图的操作:



设置子窗体大小

经过如上操作后发现出现了如下图的情况:


这就说明窗体大小没有设置好,在子窗体的load事件中添加如下代码:

Me.Width = 属性中的数值

Me.Height = 属性中的数值

问题就解决了!

 

子窗体居中显示

但是发现子窗体并没有居中显示,于是在load事件中添加如下代码

Me.Left = (frmMain.Width- Me.Width) / 2

Me.Top = (frmMain.Height- Me.Height) / 2

但是事情总是不会像想象中的那么顺利,弹出了如下框!


这个意思就是在加载的过程中MDI窗体加载之后没有删除就又加载了一遍,然而在一个工程中是不可以同时加载两个MDI窗体的!

这个问题纠结了很长一段时间,各种查资料,发现如下几个原因:

1.模块中的fMainForm.Show和登录窗体的重复,删除登录窗体的那个

2.把模块中的fMainForm.Show改成frmMain.Show

但是这些都不是我的问题所在,后来发现,原来把如下图中的那一句代码注释就OK了

Sub main()
    Dim flogin As New frmLogin   '定义登录窗口界面
    flogin.Show vbModal   '显示登陆窗体实例
    'OK为fmainform类的成员,flogin.ok 的意思是:如果输入的账户密码满足数据库中的内容,则可以执行代码
    If Not flogin.OK Then      'ok=true 则登录成功  ok =flase则登录失败
       End
    End If
    Unload flogin
    
'    Set fMainForm = New frmMain '显示主窗体实例
    
    frmMain.Show


 

子窗体有序地在底下排列

Private Sub adduserMenu_Click()
    frmshanchuuser.Show
    '当主窗体是MDI窗体时,防止子窗体显示在主窗体的图片后面
    SetParent frmshanchuuser.hWnd, Picture1.hWnd
End Sub<span style="font-size:24px; font-family: 楷体; background-color: rgb(255, 255, 255);"> </span>

分析一下这句话SetParentfrmshanchuuser.hWnd, Picture1.hWnd

格式如下:SetParen子窗体.hWnd,主窗体的picture名称.hWnd

然后问题就解决了!

 

结语

这个问题也算是一波三折呀,当时觉得问题好多,好难,但是当真正总结的时候才发现原来并没有想象中的那么困难,不怕不知道就怕不知道!加油!

 

未完待续O(∩_∩)O~


评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值