【机房收费】---(窗体显示) 实时错误426 只允许一个MDI窗体 (二)
来源:互联网 发布:职前教育网络学堂 编辑:程序博客网 时间:2024/06/05 07:25
前言:
关于窗体显示的问题一开始就遇到了,后来又遇到了,前后原因不一样,但是关于窗体显示的问题即便很小也有必要总结一下,毕竟窗体如果不显示,所有的东西都白费了。
【问题一】 主窗体显示之后,点击菜单中的选项却显示不出子窗体.
方法:用API函数SetParent来解决这个问题。
Private Declare Function SetParent Lib"user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) AsLong
① 子窗体并非不能显示,只是子窗体位于Picture 控件和主窗体之间的位置,也就是说,picture控件把要显示的子窗体遮住了。所以我们需要重新为子窗体找一个父窗体,也就是找一个容器来盛放子窗体。(父窗体严格来说应该是容器)
② SetParent是一个API函数,它的作用是为一个物体指定一个新的父窗体。(也就是把一个物体转到另一个物体上去。
③ Setparent 的用法相当简单 语法是: Setparent 物体句柄,目标句柄。
SetParent frmHanCharge.hWnd,FrmMain.hWnd
很简单的,frmHanCharge是子窗体,frmmain是主窗体,利用SetParent让子窗体在父窗体中重新显示。
所以现在可以显示出来了,但是不知道大家有没有发现,子窗体是显示出来了,可是子窗体只是沿着主窗体的上方显示出了一道边,并不能显示全部窗体。如下图所示:
找了很到代码来解决上面这个问题,查询关于让子窗体随父窗体的大小而变化大小的问题,网上关于这样的解决办法基本雷同,就是用窗体的Resize事件就可以。
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong>Private Sub Form_Resize() '当窗体改变时MDIFrom.Width = Me.ScaleWidth '重新设置Mdi子窗体为窗体有效宽度MDIFrom.Height = Me.ScaleHeight '重新设置Mdi子窗体为窗体有效高度End Sub</strong></span>
但是我用了上面的代码并达到想要的效果,于是自己想了最笨的方法,设置窗体的大小和位置,当然最笨的办法也是最有效的办法,下图是后来的结果,不过觉得所有的窗体都这样设置是有些麻烦,但是也没有找到简便的方法,就将上面的代码复制一下粘到了所有的子窗体。
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong>Private Sub Form_Load()'固定窗体大小位置 Me.Top = 0 Me.Left = 2500 Me.Width = 13000 Me.Height = 9000end sub </strong></span>
【问题二】将工程设置为sub main启动,后方便调试改为frmMain启动,当最后改为sub main启动的时候,竟然出了426错误
426错误,所有的子窗体都不能显示,错误提示只允许一个MDI窗体,奇怪,我真的是只有一个MDI窗体的啊,为什么还是会报错?
① 在网上查了很多,有10期的李雪师姐有过同样的错误和总结,我找到了他的博客细心研究,下面是博客链接,http://blog.csdn.net/u010196821/article/details/16369443 大家有兴趣的可以看一下。
② 但是我和师姐出现的原因还是不太一样,我的登录窗体的代码真的只写了一个frmMaind的show,没有多写。
③ 于是我查了一下关于出现这个问题的原因,毕竟找到根源自己才会彻.底解决问题。
④ 一个工程只允许有一个 MDIForm。此错误产生的原因及解决方法如下:
* 试图向工程中加载包含MDIForm 的文件,该工程中已经包含一个 MDIForm。
在加载其它文件之前,先删除包含已加载 MDIForm 的文件。
* 试图加载 MDIForm 的第二个实例,该MDIForm 是用 Dim 或 Set 语句创建的。
在工程中仅能创建 MDIForm 的一个实例。
⑤ 看到这里我仿佛明白了些什么,大概意思就是不能同时加载两次MDI主窗体,我开始着手从代码里面找,因为错误出现在子窗体的加载,所以只可能是主窗体和模块以及子窗体的from load事件出的问题我按了之后发现真的是模块窗体出了问题。
⑥ 下面是模块窗体中sub main的代码,加了单引号变为注释的两行代码原来是有的,后来把这两句去掉之后就可以运行了,完美解决。
'系统启动后,需要对用户进行判读,如果登陆者是授权用户,将进入系统,否则程序停止运行
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong>Sub main() Dim fLogin As New FrmLogin 'Dim FrmMain As New FrmMain fLogin.Show vbModal '显示登陆窗体实例 If Not fLogin.OK Then End End If Unload fLogin '判断是否进入系统 ' Set FrmMain = New FrmMain FrmMain.Show End Sub </strong></span>
【总结】
有时候小的问题也会困扰很久,但是最重要的是不能懈怠,多查多问,总会有点眉目,然后加以思考,实在解决不了还有其他同学和师傅,做好问题记录,只要肯用心,总有收获。
- 【机房收费】---(窗体显示) 实时错误426 只允许一个MDI窗体 (二)
- 机房收费系统之【只允许一个MDI窗体 错误:426】
- 实时错误426 只允许一个MDI窗体
- 机房收费系统——只允许有一个MDI窗体的问题
- 机房收费系统系列二:MDI子窗体和主窗体显示
- 机房收费系统-- MDI子窗体显示技巧
- 【机房收费系统】MDI菜单显示子窗体
- 机房收费系统问题(二)——MDI子窗体不显示
- MDI窗体内只显示一个子窗体
- 机房收费系统之MDI窗体
- 机房收费系统——MDI窗体
- 机房收费系统(四)MDI窗体
- 【机房收费系统】——MDI窗体
- 机房收费系统--MDI窗体不能放控件和子窗体不能显示
- 机房收费系统-MDI窗体控件不能放置以及子窗体不能显示问题
- 机房收费系统-MDI窗体与子窗体的问题
- 机房收费系统—MDI窗体与子窗体
- 机房收费系统问题(一)MDI子窗体不显示
- 常见字符编码以及利用IO实现文件分割与合并(终极IO应用)
- ArcGIS支持的常用数据类型
- OpenCV学习笔记(四):ROI区域图像叠加和图像线性混合
- AOP经典2种配置示例
- AndroidStudio如何从SVN检出项目
- 【机房收费】---(窗体显示) 实时错误426 只允许一个MDI窗体 (二)
- JAVA中堆和栈的理解
- PHPunit和CI框架整合
- Get the median of k sorted arrays
- 关于数据处理
- 分页查询 一页一页查询
- XZ_HTML之HTML列表
- 【链表】C++链表创建、删除、排序,合并
- React Router中pushState的使用方法