三个窗口:frmA,frmB,frmC
frmA里面,frmB.show 0
frmB打开后,可以frmC.show 0我想实现这样一个功能,在frmA遮挡住frmB的时候,当frmC获取焦点,就可以让frmB处于frmA上层,但是不让frmB获取焦点,因为对frmC还要有操作的,我试过frmB.ZOrder,但是总是被frmB把焦点抢去了同样,在frmC被frmA遮住时,当frmB获取焦点,就可以让frmC处于frmA上层,用show也不是个好办法,每show一次,frmC都要读取一次数据库,这样不太划算除了ZOrder和show之外,还有什么好的办法,让这两个窗口随时可以把被遮挡住的对方至于frmA上方么?

解决方案 »

  1.   

    frmB.show 0
    frmC.show 0,me
      

  2.   

    为什么不用Show 1呢?frmB.show 0
    frmC.show 0
      

  3.   

    為top的時候則是所有表單前面
       SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE   SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
      

  4.   

    frmb.show 1
    frmc.show 1
    用 show 1
      

  5.   

    你说api
    怎么不写写代码
    这里是基础区
    拜托!!!
      

  6.   


    Private Const HWND_TOP = 0
    Private Const HWND_BOTTOM = 1
    Private Const HWND_TOPMOST = -1
    Private Const HWND_NOTOPMOST = -2
    Private Const SWP_NOSIZE = &H1
    Private Const SWP_NOMOVE = &H2
    Private Const SWP_NOZORDER = &H4
    Private Const SWP_NOREDRAW = &H8Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
                                             ByVal hWndInsertAfter As Long, _
                                             ByVal X As Long, ByVal Y As Long, _
                                             ByVal cx As Long, ByVal cy As Long, _
                                             ByVal wFlags As Long) As Long
    '
    '设置窗口为最顶层
    '函数:SetTopWindow
    '参数:Winwnd 要设置为最顶层窗口的HWND
    '返回值:
    '例子:
    Public Function SetTopWindow(WinWnd As Long)
           SetWindowPos WinWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
    End Function
      

  7.   

    SetWindowPos只会让某窗口永远处于最上层,而我想要的是想让它在最上层就最上层,当有窗口遮挡它的时候也可以遮挡
    frmB是frmA的子窗体,一些数据来自frmA
    frmC是frmB的子窗体,一些数据来自frmB
    如果frmB.show一次,那就必须把frmC也show一下,读取数据库会很频繁
    我想要的效果是:
    frmA遮挡frmB时,当点击frmC里任何控件或者点击窗口,就把frmB至于frmA上方,但是不让frmB获取焦点,因为frmC里要在文本框里输入资料frmA遮挡frmC时,当点击frmB里任何控件或者点击窗口,就把frmC至于frmA上方,但是不让frmC获取焦点,因为frmB里要在文本框里输入资料最相似的案例就是QQ的对话框,对话框里可以点出聊天记录框,但它和和聊天记录是两个窗口,当有别的窗口遮挡住这两个中的任一个窗口时,随便点哪个窗口都可以显示另一个窗口,但是两个窗口的操作互不干扰,又互相联系,我就想知道如何实现这个功能
      

  8.   

    formB.show 0,formA
    formC.show 0,formA
    这可以保证formb和formc一直在forma上方。至于是否禁用,就比较简单了。
      

  9.   

    添加3个窗体,在form1的form_load事件里加上如下代码form2.show , me
    form3.show , me只是楼主把问题说得复杂了~其实就这样嘛
      

  10.   

    我也觉得楼主说的好复杂阿
    其实在click事件中加入show属性就行了
    至于你说的焦点问题,QQ里面聊天记录和输入框里面还是有焦点的
      

  11.   

    用VISABLE就避免了窗体LOAD时的初始化,在窗体的获得焦点事件里面重新分配各窗体的分布层。