<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">敲机房收费系统时也遇到了各种问题,但正是这些各种各样的问题一步步让我们提高。</span>
(一)MDI子窗体和picturebox同级问题
主窗体由于是MDI窗体,因此要在里面加command控件就要先添加picturebox控件,然后在控件里面添加各种控件,这也就导致一个问题,当打开它的一个子窗体时,就会出现如下情况:
如果图片框占据全屏,其他窗体就会被挡住,
这是因为 MDI 程序中子窗体实际上是位于 MDIClient 里,就是说子窗体的父窗体 是 MDIClient,而放置在MDI中的 picturebox 和MDIClient是同一级的层次结构
ThunderMDIForm--MDIForm1
--MDIClient
----ThunderFormDC--Form1 子窗体1
----ThunderFormDC--Form2 子窗体2
--ThunderPictureBoxDC MDI中 的 picturebox
此时可调用一个API
Public Declare Function SetParent Lib "User32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Call SetParent(form1.hWnd, fMainForm.Picture1.hWnd)
form1.show
如果form1为fmainform的子窗体,那么不加form1.show也可以,否则必须加。
注意,在这个过程中,form1.hwnd表示为子窗体句柄,不能直接放在fmainform父窗体中,否则最小化时图标就会消失,需要放在picture中,即fmainform.picture1.hwnd(2)打开一个窗体,上一个窗体自动最小化问题
这个问题的解决是靠其他小伙伴的帮助才做到的,希望也可以帮助其他同学。
Dim frm As Form For Each frm In Forms If frm.Name <> Me.Name And frm.Name <> fMainForm.Name Then frm.WindowState = 1 End If Next对于大家其他的方法,也很乐意交流。
(3)窗体最小化后不能获得焦点问题
当打开一个新的子窗体,上一个子窗体会自动最小化,但上一个窗体回复后就失去了焦点,很多控件不能用,
对此我的解决方案是将这些窗体去掉MDIchild属性设为false即不为MDI子窗体,可以达到和mdi子窗体相同的效果,当恢复大小后又能重新获得焦点。