机房收费系统(一)MDI子窗体以及在其中应用Picturebox问题

<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

然后使窗体加载时调用这个API即可

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子窗体相同的效果,当恢复大小后又能重新获得焦点。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值