我正在开发一个具有多个嵌套表单的 Access 应用程序,用户可以在其中单击选择来执行特定任务,例如输入新数据、搜索数据、打印报告等。
目前我已经为每个表单设置了自动中心。我希望用户能够移动主窗体,然后在主窗体顶部打开所有其他窗体。这些表单通常作为对话框打开。
我刚刚添加了代码,以允许后续表单在与主表单相同的位置打开。主要表单的代码如下所示:
Private Sub File_Maint_Click()
Dim ObjName As String
FrmWinTop = Forms![Main Form].WindowTop
FrmWinLeft = Forms![Main Form].WindowLeft
ObjName = "File Maintenance Form"
If IsSuper Then DoCmd.OpenForm ObjName
If Not IsSuper Then DoCmd.OpenForm ObjName, acNormal, , , , acDialog
End Sub
每个后续表单都有这样的代码:
Private Sub Form_Open(Cancel As Integer)
Me.Move FrmWinLeft, FrmWinTop
End Sub
这很好用,除了 - 在正常操作中,我通过打开主窗体的代码最小化了 Access 窗口,然后主窗体的顶部和左侧是一些模糊的数字,这样当后续窗体打开时它是不可见的。如果 Access 窗口可见,则代码工作正常。
据我所知,显然我的方法不适用于最小化的 Access 窗口,并且仅显示对话框表单。是否有其他方法可以在应用程序运行时隐藏 Access 窗口,以便正确定位表单?或者是否有不同的方法在屏幕上定位表单,以便每个后续表单都会覆盖打开它的前一个表单?
非常感谢您阅读我的问题,并提供您可能有的任何想法。
将这些变量作为全局/公共变量移动到模块中:
Public FrmWinTop As Long
Public FrmWinLeft As Long
然后使用主窗体的 OnActivate 事件设置它们:
FrmWinTop = Me.WindowTop
FrmWinLeft = Me.WindowLeft
我在以下位置找到了以下代码 http://www.access-programmers.co.uk/forums/showthread.php?t=218554:
Function fSetAccessWindow(nCmdShow As Long)
Dim loX As Long
Dim loForm As Form
On Error Resume Next
Set loForm = Screen.ActiveForm
If Err <> 0 Then
loX = apiShowWindow(hWndAccessApp, nCmdShow)
Err.Clear
End If
If nCmdShow = SW_SHOWMINIMIZED And loForm.Modal = True Then
MsgBox "Cannot minimize Access with " _
& (loForm.Caption + " ") _
& "form on screen"
ElseIf nCmdShow = SW_HIDE And loForm.PopUp <> True Then
MsgBox "Cannot hide Access with " _
& (loForm.Caption + " ") _
& "form on screen"
Else
loX = apiShowWindow(hWndAccessApp, nCmdShow)
End If
fSetAccessWindow = (loX <> 0)
End Function
如果我使用此方法隐藏主 Access 窗口而不是将其设置为最小化,则位置值似乎可以正常工作。我想我应该在发布问题之前多看看周围。