access vba 控制窗体最小化或最大化的问题

有A、B两个可以弹出的窗体,A上一个按键可以控制B窗体的最小化和还原,如何写代码或指点一下用什么命令?docmd.minimize,这个可以控制当前窗口我知道。另外不想使... 有A、 B 两个可以弹出的窗体,A上一个按键可以控制B窗体的最小化和还原,如何写代码或指点一下用什么命令?
docmd.minimize, 这个可以控制当前窗口我知道。另外不想使用visible属性。
展开
 我来答
tjrmgs
2013-10-30 · TA获得超过5765个赞
知道大有可为答主
回答量:2161
采纳率:94%
帮助的人:1039万
展开全部
这个问题难点在于窗体状态的判断上,至于DoCmd.Minimize只能作用于当前窗体其实好办,将需要最小化的窗体设置为当前窗体后就可以使用了。
由于ACCESS VBA没有WindowState属性,因此要判断窗体是否处于最小化状态我们需要借助WINDOWS API函数。
下面是具体解决方案:

1)新建一个模块,取名“模块1“
将下列代码复制黏贴到该模块之下
Option Compare Database
'声明API函数
Declare Function apiIsIconic Lib "user32" Alias "IsIconic" (ByVal hwnd As Long) As Long
Declare Function apiIsZoomed Lib "user32" Alias "IsZoomed" (ByVal hwnd As Long) As Long

'编写下列自定义函数

Private Function IsAccMaxFrom(frm As Form) As Boolean
'此函数为中间过渡函数,判断ACCESS窗体是否处于最大化状态,
'供下面自定义函数GetWindowState 调用
If apiIsZoomed(frm.hwnd) = 0 Then
IsAccMaxFrom = False
Else
IsAccMaxFrom = True
End If
End Function

Private Function IsAccMinForm(frm As Form) As Boolean
'此函数中间过渡函数,判断ACCESS窗体是否处于最小化状态,
'供下面自定义函数GetWindowState 调用
If apiIsIconic(frm.hwnd) = 0 Then
IsAccMinForm = False
Else
IsAccMinForm = True
End If
End Function

Public Function GetWindowState(frm As Form) As Integer
'此函数判断ACCESS窗体处于何种状态,供需要时调用
'函数返回0,表示窗体处于正常状态
'函数返回1,表示窗体处于最小化状态
'函数返回2,表示窗体处于最大化状态
If IsAccMinForm(frm) = True Then
GetWindowState = 1
Exit Function
ElseIf IsAccMaxFrom(frm) = True Then
GetWindowState = 2
Exit Function
Else
GetWindowState = 0
End If
End Function

2)假设A、B两个窗体名分别为“窗体1” 和“窗体2” 。为“窗体1”的命令按钮“COMMAND8”编写下列单击事件过程
Private Sub Command8_Click()
If CurrentProject.AllForms("窗体2").IsLoaded = True Then
If GetWindowState(Forms!窗体2) = 1 Then
'窗体处于最小化时,则复原
DoCmd.SelectObject acForm, "窗体2"
DoCmd.Restore
Else
'窗体不处于最小化状态时,则最小化
DoCmd.SelectObject acForm, "窗体2"
DoCmd.Minimize
End If
Else
MsgBox "窗体尚未打开" ''如果窗体尚未打开则予以提示
End If
End Sub

'如果要求在“窗体2”还没又打开时,强制打开窗体并最小化,则代码可以改写如下
Private Sub Command9_Click()
If CurrentProject.AllForms("窗体2").IsLoaded = True Then
If GetWindowState(Forms!窗体2) = 1 Then
DoCmd.SelectObject acForm, "窗体2" '将窗体2设置为当前窗体
DoCmd.Restore
Else
DoCmd.SelectObject acForm, "窗体2"
DoCmd.Minimize
End If
Exit Sub
End If
'窗体2尚未打开时强制打开窗体并最小化
DoCmd.OpenForm "窗体2"
DoCmd.Minimize
End Sub

好了,到此大功告成。如有疑问,可以私信给我。
古龙雯华0k
2013-10-30 · 超过14用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:18.2万
展开全部
非当前窗体不能最小化,最大化。实在要执行需要调用API
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式