Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 在access vba中设置窗体的位置_Forms_Ms Access_Vba_Ms Access 2007 - Fatal编程技术网

Forms 在access vba中设置窗体的位置

Forms 在access vba中设置窗体的位置,forms,ms-access,vba,ms-access-2007,Forms,Ms Access,Vba,Ms Access 2007,我正在开发一个具有多个嵌套表单的Access应用程序,用户在该应用程序上单击选择以执行特定任务,例如输入新数据、搜索数据、打印报告等 目前,我已将每个表单设置为autocenter。我希望用户能够移动主窗体,然后在主窗体顶部打开所有其他窗体。表单通常作为对话框打开 我刚刚添加了代码,以允许后续表单在与主表单相同的位置打开。主要表单的代码如下所示: Private Sub File_Maint_Click() Dim ObjName As String FrmWinTop = Forms![Mai

我正在开发一个具有多个嵌套表单的Access应用程序,用户在该应用程序上单击选择以执行特定任务,例如输入新数据、搜索数据、打印报告等

目前,我已将每个表单设置为autocenter。我希望用户能够移动主窗体,然后在主窗体顶部打开所有其他窗体。表单通常作为对话框打开

我刚刚添加了代码,以允许后续表单在与主表单相同的位置打开。主要表单的代码如下所示:

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
每个后续表单都有如下代码:

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


非常感谢您阅读我的问题,并提供您的想法。

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

Public FrmWinTop  As Long
Public FrmWinLeft As Long
然后使用主窗体的OnActivate事件设置它们:

FrmWinTop = Me.WindowTop
FrmWinLeft = Me.WindowLeft

我在上找到了以下代码 :

函数fSetAccessWindow(nCmdShow As Long)
暗淡的loX和长的loX一样
形如形
出错时继续下一步
设置loForm=Screen.ActiveForm
如果错误为0,则
loX=apiShowWindow(hWndAccessApp、nCmdShow)
呃,明白了
如果结束
如果nCmdShow=SW_show最小化且loForm.Modal=True,则
MsgBox“无法使用最小化访问”_
&(loForm.Caption+“”)_
&“屏幕上的表单”
ElseIf nCmdShow=SW_HIDE And loForm.PopUp则为True
MsgBox“无法隐藏对的访问”_
&(loForm.Caption+“”)_
&“屏幕上的表单”
其他的
loX=apiShowWindow(hWndAccessApp、nCmdShow)
如果结束
fSetAccessWindow=(loX 0)
端函数

如果使用此方法隐藏主访问窗口,而不是将其设置为最小化,则位置值似乎工作正常。我想我应该在发布问题之前多看看四周。

是的,对不起,我应该注意到变量在单独的模块中是公共的。这些变量是在用户单击按钮打开后续表单时设置的。如果我将它们设置为OnActivate事件,并且用户移动表单,我担心在打开新表单时,它们不会具有当前表单位置。谢谢您的建议。正如我所说的,除非主访问窗口最小化,否则代码似乎有效,那么位置值似乎不起作用。然后进行检查,仅当窗体的顶部/左侧值在一些合理值范围内时,才设置变量。