access vba 控制窗体最小化或最大化的问题
有A、B两个可以弹出的窗体,A上一个按键可以控制B窗体的最小化和还原,如何写代码或指点一下用什么命令?docmd.minimize,这个可以控制当前窗口我知道。另外不想使...
有A、 B 两个可以弹出的窗体,A上一个按键可以控制B窗体的最小化和还原,如何写代码或指点一下用什么命令?
docmd.minimize, 这个可以控制当前窗口我知道。另外不想使用visible属性。 展开
docmd.minimize, 这个可以控制当前窗口我知道。另外不想使用visible属性。 展开
2个回答
展开全部
这个问题难点在于窗体状态的判断上,至于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
好了,到此大功告成。如有疑问,可以私信给我。
由于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
好了,到此大功告成。如有疑问,可以私信给我。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询