机房收费系统之【只允许一个MDI窗体 错误:426】 标签: vb 2014-08-15 10:36 1149人阅读 评论(23)

机房收费系统的主窗体是MDI窗体,为了在这个窗体上添加控件,所以我们在窗体上添加了picture控件,MDI窗体中,子窗体实际上位于MDIClient里,即子窗体的父窗体就是MDIClient,而放置在MDI中的picture控件和MDIClient是同一级别的,由于层次结构,所以无法使子窗体显示在picture控件的上面(这段话出自刘杰师哥的博客)。为了将子窗体显示到父窗体的上面,所以我们使用了API函数,就是这个setparent函数(Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long),思思用的就是这个函数,然后她成功了,但是我死活成功不了,老是报错就是这个:


机房收费系统之【只允许一个MDI窗体 错误:426】                                                                                                         标签:               vb                                            2014-08-15 10:36             1149人阅读              评论(23)


这个问题已经让我苦恼了好几天,之前想着先不用主界面了,敲一个调一个,没想到今天别的窗体都没办法直接启动了,好了,有啥办法,调吧,之前其实查了好多资料,都说这样写是没错的,但是就是不能运行,还有好多就是答非所问,终于搜到一篇相关一点的,就是这个:实时错误426 只允许一个MDI窗体 李雪师姐的博客,但是她的这种情况和我的不一样,我就真的只有这一个show,再一次卡在这,继续查,看到有人说别用sub main()做启动窗体,我就试着将login改成了启动窗体,然后稍微修改了一下代码,也可以运行了,但是每次关闭主窗体时,程序都没办法自己退出,还需要手动退出,而且感觉不用sub main特别不好,只好继续查,查到了这个:


一个工程只允许有一个 MDIForm。此错误产生的原因及解决方法如下:

  • 试图向工程中加载包含 MDIForm 的文件,该工程中已经包含一个 MDIForm

    在加载其它文件之前,先删除包含已加载 MDIForm 的文件。

  • 试图加载 MDIForm 的第二个实例,该 MDIForm 是用 Dim 或 Set 语句创建的。

    在工程中仅能创建 MDIForm 的一个实例。


看到这里,突然豁然开朗,难道是我的模块有问题?我的模块登陆这块是照着学生敲得,有这么一句:

Set fMainform = New frmmain
    fMainform.Show

难道问题出在这里?于是我把它改成了 frmmain.show,没想到真的可以运行了,但是思思也是这么写的,联想到李雪师姐的博客,这说明肯定在某个地方,我又把MDI窗体加载了一遍,不过我还没找到到底实在哪里,就只好先把模块中的这句改成这样:

frmmain.show

改成这样以后,运行的确实没什么问题了,先接着敲,看看能不能找到到底是在哪里又加载了一遍。