在access vba中设置表单的位置

问题描述 投票:0回答:2

我正在开发一个具有多个嵌套表单的 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 窗口,以便正确定位表单?或者是否有不同的方法在屏幕上定位表单,以便每个后续表单都会覆盖打开它的前一个表单?

非常感谢您阅读我的问题,并提供您可能有的任何想法。

forms ms-access vba ms-access-2007
2个回答
0
投票

将这些变量作为全局/公共变量移动到模块中:

Public FrmWinTop  As Long
Public FrmWinLeft As Long

然后使用主窗体的 OnActivate 事件设置它们:

FrmWinTop = Me.WindowTop
FrmWinLeft = Me.WindowLeft

0
投票

我在以下位置找到了以下代码 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 窗口而不是将其设置为最小化,则位置值似乎可以正常工作。我想我应该在发布问题之前多看看周围。

© www.soinside.com 2019 - 2024. All rights reserved.