设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1884|回复: 9
打印 上一主题 下一主题

[窗体] 一个难题: 窗体显示问题

[复制链接]
跳转到指定楼层
1#
发表于 2003-6-4 16:59:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

Private Sub Report_Open(Cancel As Integer)
      Forms("frmPay").Visible = False
      Forms("dlgPrint").Visible = False
      
End Sub

Private Sub Report_Close()
      Forms("frmPay").Visible = True
      Forms("dlgPrint").Visible = True

End Sub

"frmPay" 和 "dlgPrint" 的弹出方式和模式都设为真,当打开报表时两个窗体都被隐藏。但
关闭报表时只有"frmPay"被显示,这个问题如何解决。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2003-6-4 19:24:00 | 只看该作者
Private Sub Report_Open(Cancel As Integer)
      Forms("frmPay").Visible = False
      DoCmd.Close acForm, "dlgPrint"      
End Sub

Private Sub Report_Close()
      Forms("frmPay").Visible = True
      DoCmd.OpenForm "dlgPrint"
End Sub

模式窗体原该如此,你可把第二个窗体的隐藏/显示改为关闭/打开,如果第二个窗体要保留什么状态,只有通过窗体参数编程控制了。

3#
发表于 2003-6-4 21:47:00 | 只看该作者
请参照以下:
Private Sub Report_Open(Cancel As Integer)
      Forms("frmPay").Visible = False
      Forms("dlgPrint").Visible = False
      
End Sub

Private Sub Report_Close()
      docmd.openForm "frmPay"
      docmd.openForm  "dlgPrint"
End Sub

4#
 楼主| 发表于 2003-6-4 23:23:00 | 只看该作者
实际上我要实现的是让打开的报表显示在最前端,而要隐藏和显示的窗体都是正在输入数据的窗体,都不能关闭。我对API不熟,不知道有没有能解决这个问题的函数。
5#
发表于 2003-6-5 00:22:00 | 只看该作者
这样行不行,把报表窗体最大化,其它的窗体自然就在后面看不见了.
6#
发表于 2003-6-5 04:37:00 | 只看该作者
用API的ShowWindow函数,要先声明:
Private Declare Function apiShowWindow Lib "user32" _
    Alias "ShowWindow" (ByVal hWnd As Long, _
          ByVal nCmdShow As Long) As Long

Private Sub Report_Open(Cancel As Integer)
    apiShowWindow Forms("frmPay").hWnd, 0
    apiShowWindow Forms("dlgPrint").hWnd, 0
End Sub

Private Sub Report_Close()
    apiShowWindow Forms("frmPay").hWnd, 1
    apiShowWindow Forms("dlgPrint").hWnd, 1
End Sub

7#
 楼主| 发表于 2003-6-7 00:29:00 | 只看该作者
在浪费了很多时间后才发现这个:

Modal(模式)属性用于指定窗体是否以模式方式打开窗体。如果窗体是以模式窗体打开的,
在将焦点移动到另一个对象之前,必须关闭此窗体。


Public Function FormsShow(isShow As Boolean)
      Dim frm As Form
      Dim strErr As String
     
      On Error GoTo Error_r
      
      If isShow Then
         For Each frm In Forms
             frm.Visible = True
         Next
         Set frm = Screen.ActiveForm
         frm.Modal = True
      Else
         For Each frm In Forms
             frm.Modal = False
             frm.Visible = False
         Next
      End If
      
Error_r:

End Function
8#
发表于 2003-6-10 03:45:00 | 只看该作者
楼上的方法很特别,思路很新。
又学了一招,谢谢。
9#
发表于 2003-6-12 09:11:00 | 只看该作者
就是!把报表窗体最大化,其它的窗体自然就在后面看不见了. 根本不须编程
10#
发表于 2003-6-12 16:48:00 | 只看该作者
我这里有一个函数,大家看看有没有收藏价值:
Public Function Opclose(i As Integer)
Dim frm As Form, intI As Integer
    Dim intForms As Integer
    intForms = Forms.Count
    If intForms > 0 Then
        For intI = 0 To intForms - 1
          Set frm = Forms(intI)
             If i = 1 Then
                frm.Visible = False
             Else
                frm.Visible = True
             End If
        Next intI
    Else
    Exit Function
    End If
End Function

分别在Report的Open和Close事件中呼叫这个函数就行啦。

[此贴子已经被作者于2003-6-12 8:50:43编辑过]

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-7 11:36 , Processed in 0.095470 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表