您的位置:首页 > 其它

机房收费系统之子窗体显示

2015-08-17 20:24 246 查看
   一、 问题描述:    当向机房收费系统中添加了MDI窗体之后。设置其他的一些窗体做为父窗体的子窗体。(把窗体的MDIchild属性设置为true)。之后开始向主窗体添加图片啦。添加完毕后打算在主窗体上添加各种控件。就开始报错啦。如下图。

                                                                


无法在窗体上添加command和textbox等无对齐属性的控件。之后用picturebox控件作为一个容器控件,让图片添加到picturebox控件上面。其他的控件就可以添加在picturebox控件上啦。紧接着问题又来了,运行通过代码  子窗体.show 。 却看不到子窗体显示出来。(其实并不是子窗体无法显示。而是子窗体和picturebox控件在这个条件下属于同一级别的。显示的子窗体被picturebox控件挡住啦。因此看不见)

  二、解决方法:方法一:“借鸡下蛋”

                        既然MDI窗体上不能添加无对齐属性的控件。我们可以通过借助一个普通的窗体作为容器,把这些控件放置在这个普通窗体上。       ① 向工程中添加一个普通窗体,并将其MDIchild属性设置为True,把borderstyle属性设置为none(无边控)

                       ②让主窗体加载的时候子窗体也跟着加载。子窗体的大小等于父窗体的大小。(如下图)



     

        这样就可以在窗体中加载任何控件啦,同时避免了子窗体无法显示的问题。

        方法二:“换父亲”   通过一个API函数:SetParent函数。该函数功能是改变某个子窗体的父窗体。

          ① 首先在模块中添加一个声明

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

         ② 参数 hWndChild:子窗口句柄。hWndNewParent:新的父窗口句柄。如果该参数是NULL,则桌面窗口就成为新的父窗口。

             返回值:如果函数成功,返回值为子窗口的原父窗口的句柄:如果函数失败,返回值为Null

            具体代码如下
<span style="font-size:18px;">PrivateSub RechargeMenu_Click()
SetParentfrmRecharge.hwnd,frmMain.hwnd
frmRecharge.Show

End Sub
</span>
         这样就能让子窗体显示啦。

     方法比较:方法一 优点:  一劳永逸,设置成功之后,以后每次显示子窗体的时候就不用设置啦。

                                   缺点::个人感觉这种方法有点旁门左道

                       方法二 优点:通过一个API函数:GetParent函数,实现这些功能。API函数更符合大家的习惯。

                                   缺点:每次子窗体显示的时候都需要输入重复的代码。有些繁琐。           

       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: