我想设计一个程序,就是两个窗口a、b上的按钮都显示同一个另外窗口c
但我要判断其中c窗口是否打开,如果已经被a打开了,则点b上面再点此按钮的时候
不重新打开新的c窗口
谢谢
但我要判断其中c窗口是否打开,如果已经被a打开了,则点b上面再点此按钮的时候
不重新打开新的c窗口
谢谢
解决方案 »
- 任何地方创建对象都需要 Set obj = nothing 吗?
- 如何将搜索出的模糊匹配数据输出到DataGrid
- SQLServer数据库远程访问的“超级难题”,请高手前来赐教
- 关于listview的一个超简单的问起请教,您的办法有效马上结贴给分。
- VB中怎样实现延时?最好能指定延时时间。
- ToolBar方面的一個簡單問題,請進.....
- 如何将一个listview控件中的内容(report风格)存入一个word文件,并带有表格线
- 各位高手进来看一下,最近接了个活,做一个网上考试系统,请各位多提建议
- 小难题:你有兴趣吗?
- 关于鼠标右键的高级问题
- 关于FTP的命令文件夹、层数一些注意事项!大虾快救命!
- 关于ACCESS创建表 某个字段要保留2位小数怎么写
Public Function IsShow(FormName As String) As Boolean
Dim lR As Long
lR = FindWindow(vbNullString, FormName)
If lR <> 0 Then
IsShow = True
Else
IsShow = False
End If
End Function
Private Sub Command1_Click()
if IsShow("C窗体的标题")=False then
c.show
else
msgbox "c窗体已经打开"
end if
End Sub
呵呵,而且代码写得很漂亮
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As LongPublic Function IsLoad(strFormName As String) As Boolean
'\\******************************************************
'\\函数作用:判断某窗体是否加载
'\\函数参数:strFormName,窗体的名称
'\\函数返回:窗体显示则返回True,否则返回False
'\\******************************************************
Dim lngFormHandle As Long
lngFormHandle = FindWindow(vbNullString, strFormName)
If lngFormHandle <> 0 Then
IsLoad = True
Else
IsLoad = False
End If
End Function
Public Function IsShow(strFormName As String) As Boolean
'\\******************************************************
'\\函数作用:判断某窗体是否显示
'\\函数参数:strFormName,窗体的名称
'\\函数返回:窗体显示则返回True,否则返回False
'\\****************************************************** Dim objForm As Form
IsShow = False
For Each objForm In Forms
If objForm.Name = strFormName Then
If objForm.Visible = True Then
IsShow = True
End If
Exit For
End If
NextEnd Function
Public Function IsShow1(strFormName As String) As Boolean
'\\******************************************************
'\\函数作用:判断某窗体是否显示,使用API方法
'\\函数参数:strFormName,窗体的名称
'\\函数返回:窗体显示则返回True,否则返回False
'\\****************************************************** Dim lngFormHandle As Long
lngFormHandle = FindWindow(vbNullString, strFormName) '查找该窗体的句柄
If lngFormHandle = 0 Then '如果窗体没有加载,自然,也就没有显示
IsShow1 = False
Exit Function
End If
'Debug.Print IsWindowVisible(lngFormHandle)
If IsWindowVisible(lngFormHandle) = 1 Then '使用IsWindowVisible这个API函数进行判断
IsShow1 = True
Else
IsShow1 = False
End IfEnd Function
如果你另外一个工程有叫相同名字的Form时
它同样会说找到叫这个名字的窗体
Private Sub CommandA_Click()
frmC.Show
End Sub
Private Sub CommandB_Click()
frmC.Show
End Sub
这样不需要做任何别的处理,因为不会弹出新的C窗体,内存中只有这一个C窗体对象如果是另外一种写法:
Private Sub CommandA_Click()
Dim objFm As New frmC
objFm.Show
End Sub
Private Sub CommandB_Click()
Dim objFm As New frmC
objFm.Show
End Sub
这样可以创建多个frmC的实例,那么就需要加一下处理的语句先判断在工程中的Forms集合是否还有叫做frmC的窗体,有的话表示frmC已经显示了。
因为我考虑的不是很周全,免得误导他人另外小结一下:判断窗体是否显示,直接看 form对象的visible属性即可至于窗体是否已经加载,只要 if not form is nothing就可以了True的话,表示窗体已经加载,剩下的只是显示与否的问题
Private Declare Function SetActiveWindow Lib "user32" (ByVal hwnd As Long) As LongPublic Function IsShow(FormName As String) As Boolean
Dim lR As Long
lR = FindWindow(vbNullString, FormName)
If lR <> 0 Then
IsShow = True
lR = SetActiveWindow(lR)
SendKeys ("{ENTER}")
Else
IsShow = False
End If
End FunctionPrivate Sub Command1_Click()
If IsShow("c窗体标题") = False Then
c窗体.Show
End If
End Sub
就是这样了,问题解决