机房收费系统(一)——解决子窗体被picturebox覆盖
来源:互联网 发布:程序员找工作最佳月份 编辑:程序博客网 时间:2024/05/21 12:43
在敲机房刚开始可谓大波大浪,在敲学生过程中侥幸逃过的问题,在这里全部遇到了,有些坑还是要跳的,该经历的总会经历,经历过后就会大彻大悟。。。。。
问题一:无可用的MDI窗体可加载
原因:
帮助上这样解释:试图加载一个MDIChild属性设为True的窗体,但是在运行时工程中却没有可加载的MDIForm。
这个问题在敲学生的时候侥幸逃过,是因为在敲学生的时候没有建立子窗体,然而在这里建立了子窗体,加载子窗体的时候提示无可用的MDI窗体,因为我根本就没有创建主窗体,只是添加了个form窗体。
知道了这个问题之后就点击工程——添加MDI窗体选项,添加了个主窗体,这个过程满眼的泪啊,以前在form窗体中建的菜单,控件都得重新再来。
不过通过这个问题,我就明白了,有些坑是必须跳的,前面侥幸逃过了,现在就得跳,踏实走好每一步吧。。。。。
添加了主窗体,这个问题解决了,但是向主窗体上添加控件的时候。接着新的朋友又来了。
问题二:无对齐属性的控件不能直接放置在MDI窗体上
那我们就应该想:什么样的控件既有对齐属性,又可以当容器呢?当然是picturebox了,百度果然也是这样说的,MDI窗体上不能直接放置控件,需要借助picturebox,然后把控件画到picturebox上。
当我们把picturebox添加好之后,这样可以添加控件了,但是新的问题又来了哦,如下:
问题三:子窗体被picturebox遮挡
当我们把picturebox添加好之后,这样可以添加控件了,但是show不出子窗体,于是接着找度娘,用上了setparent函数。
步骤一:在模块中添加setparent函数
<span style="font-size:18px;">Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long</span>
函数功能:改变某个子窗口的父窗口,也就是说需要把子窗口放到另一个窗口或容器中显示,这样就不会出现子窗口被picturebox遮挡的情况了参数:
参数:hwndchild 子窗口句柄
hwndnewparent 新的父窗口句柄
步骤二:编写代码
<span style="font-size:18px;">Private Sub registermenu_Click(Index As Integer) SetParent frmregister.hWnd, frmmain.hWnd frmregister.ShowEnd Sub</span>
frmregister为子窗体,frmmain为新的父窗体,本以为这样就可以给子窗体换一个新的父窗体,可是提示如下错误:
于是接着找度娘,原因是:程序只允许一个主窗体。
可想而知我的程序不只是一个主窗体,于是看代码,恍然所悟,我们可以看到下面的sub main过程,登录成功后,会实例化主窗体frmmain,最后fmainform会显示出来,通过上面的给子窗体换显示的父窗体的代码可知,我们设置的新的父窗体是frmmain,而frmmain就是主窗体,这样程序就会出现两个主窗体,他也不知道该显示那个主窗体了,于是就会报错。
'定义一个过程,设置登录窗体为启动窗体Sub main() Dim flogin As New frmlogin '实例化登录窗体 flogin.Show vbModal '显示登录窗体 If Not flogin.ok Then End End If Unload flogin Set fmainform = New frmmain '实例化主窗体 fmainform.Show '显示主窗体 End Sub
<span style="font-size:18px;">Private Sub registermenu_Click(Index As Integer) Form1.Show SetParent frmregister.hWnd, Form1.hWnd frmregister.ShowEnd Sub</span>
这下子不会出现上面的错误了,因为没有要加载的主窗体了,同时子窗体可以在form里显示出来,可是form窗体和frmmain窗体是独立的,当拖动frmmain窗体的时候,子窗体不会跟着拖动,当关闭主窗体是,子窗体照样可以咋form里显示,这种方法看来还是有缺陷,没有把子窗体融入到frmmain里。
通过上面的两处错误,我知道了,新的父窗体不可以是主窗体,同时又不能是与frmmain脱离的一般的窗体,那该让谁来当新的父窗体呢???
于是接着百度,发现一句话,父窗体严格来说可以是一个容器,看到这句话,才明白我前面的理解有多么局限了,从刚开的以为新的父窗体只能是主窗体,到后来的可以是一般的form窗体,到现在我可以理解成一个picturebox控件也可以当作新的父窗体,让子窗体在上面显示,理解到这,就像发现一百万一样开心哈哈
picture1不是主窗体,然而picture1又在主窗上,这样就可以让picture1当作新的父窗体,让子窗体在上面显示。
编写代码:
<span style="font-size:18px;">Private Sub registermenu_Click(Index As Integer) SetParent frmregister.hWnd, Picture1.hWnd frmregister.ShowEnd Sub</span>
结果成功地显示了子窗体,困扰我三天的问题就这样迎韧而解了,在一步步解决问题的过程中收获才是最多的。
总结:
通过这个问题,对盲人摸象又有了深刻的理解,有些问题刚开始即使百度,也理解不了问题的全貌,只是可以看到一个角度,就像刚开始我以为新的父窗体只能是主窗体,到后来理解可以是一般的form窗体,到最后理解可以是一个picturebox控件,只有不断地学习才可以看清楚全貌,有些坑是必须跳的,遇到问题自己不断解决的过程,收获的不仅仅是解决了的问题,更多的是心灵上的满足。
- 机房收费系统(一)——解决子窗体被picturebox覆盖
- 【第一遍机房收费系统】——如何解决子窗体被父窗体图片框覆盖的问题
- 机房收费系统-----如何解决子窗体被picturebox挡住的办法
- 机房收费系统(一)MDI子窗体以及在其中应用Picturebox问题
- 机房收费系统—MDI窗体与子窗体
- 机房收费系统初体验——"歪打"无按钮标题栏,"正着"父窗体加载picturebox无遮挡显示子窗体
- 机房收费系统——子窗体最小化
- 机房收费系统—子窗体如何显示
- 机房收费系统—子窗体被覆盖
- 机房收费系统问题集(2)——移动登陆界面+show出子窗体
- 机房收费系统问题(二)——MDI子窗体不显示
- 机房收费系统(一)—报表
- 机房收费系统——登录窗体
- 机房收费系统——组合窗体
- 机房收费系统——MDI窗体
- 【机房收费系统】——登录窗体
- 机房收费系统——登录窗体
- 机房收费系统——登录窗体
- 源码安装php-7.0.7
- 使用java技术将Excel表格内容导入mysql数据库
- C++模板类链接错误:LNK2001, LNK2019
- 枚举-画家问题(算法基础 第2周)
- 游戏编程十年总结
- 机房收费系统(一)——解决子窗体被picturebox覆盖
- window版本及适合的visual studio
- 免费!全网!真正的听歌下载神器
- 《编程导论(Java)•0.1 编程与计算机科学》
- UVA 439 Knight Moves
- Django中扩展Paginator实现分页
- linux的centos7的数据库连接本地navi cat需要注意的
- Android M原生BUG,手机使用过程中SystemServer空指针异常导致手机重启
- 安卓入门--接口回调机制