我正在使用多个嵌套表单的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窗口,以便正确定位表单?或者是否有不同的方法在屏幕上定位表单,以便每个后续表单将覆盖打开它的先前表单?
非常感谢您阅读我的问题,并提供您可能有的任何想法。
答案 0 :(得分:0)
将这些变量作为全局/公共变量移动到模块:
public OrderService(@InjectParam OrderValidationService service,
@InjectParam OrderCampaignService campaignService) {
this.service = service;
this.submissionErrorHandler = submissionErrorHandler;
this.campaignService = campaignService;
}
然后使用主窗体的OnActivate事件设置它们:
Public FrmWinTop As Long
Public FrmWinLeft As Long
答案 1 :(得分: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窗口而不是将其设置为最小化,则位置值似乎可以正常工作。猜猜在发帖之前我应该多看一下。