Office中国论坛/Access中国论坛

标题: [求助]如何判断窗体是用Docmd.OpenForm方法用acDialog参数打开的 [打印本页]

作者: kevindeng    时间: 2006-6-1 00:12
标题: [求助]如何判断窗体是用Docmd.OpenForm方法用acDialog参数打开的
用Docmd.OpenForm打开窗体,用acDialog参数.

这个窗体中有一按钮,想用来判断窗体的打开模式,怎么写代码啊?

[此贴子已经被作者于2006-5-31 17:39:43编辑过]


作者: wu8313    时间: 2006-6-1 04:12
openform方法可以使用windowsmode 常量,可是如何读出该常量,然后做出判断,似乎不可以。


作者: kevindeng    时间: 2006-6-1 16:47
这很奇怪,难道没有别的办法吗?
作者: kevindeng    时间: 2006-6-2 01:04
用API可以不可以啊,谁知道啊
作者: andymark    时间: 2006-6-2 01:08
以下是引用kevindeng在2006-5-31 16:12:00的发言:


用Docmd.OpenForm打开窗体,用acDialog参数.

这个窗体中有一按钮,想用来判断窗体的打开模式,怎么写代码啊?



     打开模式是指最大化,最小化,还是???

     按钮的作用是来判断自身窗体的打开模式,还是其他窗体的模式??
作者: kevindeng    时间: 2006-6-2 01:26
按钮是判断自身窗体的打开模式,其实就是怎么再读出acDialog常量,2楼的理解是正确的
作者: fan0217    时间: 2006-6-2 03:30
你有何用途呢?
作者: andymark    时间: 2006-6-2 19:56
不知是不是你所需的,

Private Declare Function IsZoomed Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Command0_Click()

Dim minflag As Long, maxflag As Long

minflag = IsIconic(Me.hwnd)
maxflag = IsZoomed(Me.hwnd)
If minflag <> 0 Then
  Debug.Print "Form is minimized"
ElseIf maxflag <> 0 Then
  Debug.Print "Form is maximized"
Else
  Debug.Print "Form is restored"
End If


End Sub

作者: kevindeng    时间: 2006-6-2 22:33
楼上的代码对这个问题没有用处的,不过非常感谢你的关注!

看来是没办法实现了
作者: andymark    时间: 2006-6-2 22:37
以下是引用fan0217在2006-6-1 19:30:00的发言:
你有何用途呢?

     要实现什么样的功能?
作者: kevindeng    时间: 2006-6-2 22:53
以下是引用fan0217在2006-6-1 19:30:00的发言:
你有何用途呢?

用途是这样的:

FORM2有一组合框的行来源是FORM1的数据源,当用户在FORM2中输入这个组合框数据的时候如果发现数据还没添加到下拉列表的时候可以双击此组合框用acDialog方式打开FORM1进行添加数据,FORM1数据添加完毕时关闭刷新FORM2组合框的行来源并直接把刚才添加的数据填到FORM2的组合框中.

因为在正常状态下打开FORM1的时候是不需要做上面最后一项操作的,所以在FORM1关闭的时候对FORM1的打开模式做个判断,如果是acDialog就做那项操作.

其实是可以做一个全局的变量来判断FORM1是不是在FORM2双击组合框是打开的,但是我觉得如果是能判断FORM1的打开模式的话比设置全局变量要方便实施
作者: andymark    时间: 2006-6-2 23:11
判断FORM1是不是在FORM2双击组合框是打开的,参考这个例子

http://www.office-cn.net/vvb/dispbbs.asp?boardid=2&replyid=14390&id=40663&page=2&skin=0&Star=2


作者: wu8313    时间: 2006-6-3 04:49
引用11楼的话:

“因为在正常状态下打开FORM1的时候是不需要做上面最后一项操作的,所以在FORM1关闭的时候对FORM1的打开模式做个判断,如果是acDialog就做那项操作.
因为在正常状态下打开FORM1的时候是不需要做上面最后一项操作的,所以在FORM1关闭的时候对FORM1的打开模式做个判断,如果是acDialog就做那项操作.”


为了解决这个问题,可以做两个 form1 ,除了窗体名称不同,其余一模一样就可以了。

正常打开和acdialog打开来添加刷新form2数据的时候,两次并不干扰的。

========================================================================
作者: andymark    时间: 2006-6-3 04:58
也不需要增加一个form ,直接判断form1有没有打开,如果有,关闭form1 再用acDialog模式打开

没有就用acDialog打开
作者: tmtony    时间: 2006-6-3 07:26
两种方法
1.如果你的组合框是绑定到表,则只需使用acDialog打开添加窗体,然后在docmd.Openform,,,,,AcDialog后面加上 组合框.Requery就可以刷新数据,这个刷新代码肯定在添加窗体关闭后才执行的,因为添加窗体是模式打开的,窗体未关闭,不会执行后面的代码

2.如果你的组合框是逐项用代码添加项目的.则也可上面同样的方法,只是添加窗体需要返回刚添加的项目,然后在docmd.Openform,,,,,AcDialog后面加上 插入到组合框的代码.


作者: kevindeng    时间: 2006-6-3 16:51
TO: 13楼

实在不想再做一个窗体,因为在程序中有很多这种情况,如果都再做一个窗体的话,数据库增大,况且维护也不方便.

TO: 14楼 15楼

如果那个添加窗体只用列表框打开的话,是没有问题的.问题是那个添加窗体不单是从那个列表框中打开,用户也有可能直接打开那个窗体输入数据.所以需要在列表框打开窗体的时候做判断.

[此贴子已经被作者于2006-6-5 8:41:54编辑过]


作者: kevindeng    时间: 2006-6-5 20:42
不得以,还是做个全局变量吧




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3