F_DataAccess:设计好的MDI子窗体
其中F_DataAccess窗体中添加了自定义属性:
WindowTitle属性:窗口标题
TableId:表编号属性,映射需要打开的表模块中的定义:
Public Enum dtTableId
dtProducts = 1
dtEmployees = 2
dtSuppliersAndCustomers = 3
End EnumMDI窗体中我使用菜单调出窗体MenuProducts菜单的事件过程:
Dim Products As New F_DataAccess
With Products
.WindowTitle = "产品"
.TableId = dtTableId.dtProducts
.Show
End With
MenuEmployees菜单的事件过程:
Dim Employees As New F_DataAccess
With Products
.WindowTitle = "职员"
.TableId = dtTableId.dtEmployees
.Show
End With
思路是正常的,但有一个问题,就是每次点击菜单都会有一个新MDI新窗体启动。有没有办法让MDI窗体在关闭之前再次点击菜单时让已经启动的窗体获得焦点而不再次启动窗体,前提是不重新设计窗体。如:点击二次菜单“MenuProducts”就会有2个产品窗体被加载,真烦。
其中F_DataAccess窗体中添加了自定义属性:
WindowTitle属性:窗口标题
TableId:表编号属性,映射需要打开的表模块中的定义:
Public Enum dtTableId
dtProducts = 1
dtEmployees = 2
dtSuppliersAndCustomers = 3
End EnumMDI窗体中我使用菜单调出窗体MenuProducts菜单的事件过程:
Dim Products As New F_DataAccess
With Products
.WindowTitle = "产品"
.TableId = dtTableId.dtProducts
.Show
End With
MenuEmployees菜单的事件过程:
Dim Employees As New F_DataAccess
With Products
.WindowTitle = "职员"
.TableId = dtTableId.dtEmployees
.Show
End With
思路是正常的,但有一个问题,就是每次点击菜单都会有一个新MDI新窗体启动。有没有办法让MDI窗体在关闭之前再次点击菜单时让已经启动的窗体获得焦点而不再次启动窗体,前提是不重新设计窗体。如:点击二次菜单“MenuProducts”就会有2个产品窗体被加载,真烦。
MenuEmployees菜单的事件过程:
Dim Employees As New F_DataAccess
With Employees
.WindowTitle = "职员"
.TableId = dtTableId.dtEmployees
.Show
End With
Private Products As New F_DataAccess
Private Employees As New F_DataAccessMenuProducts菜单的事件过程改为:
If Products.Visual Then
Products.SetFouce
Else
With Products
.WindowTitle = "产品"
.TableId = dtTableId.dtProducts
.Show
End With
End If现在考虑有没有其他方案.
if Products Is Nothing then
Dim Products As New F_DataAccess
With Products
.WindowTitle = "产品"
.TableId = dtTableId.dtProducts
.Show
End With
else
Products.SetFocus'忘了form有没有这个方法,如果没有,则调用SetFocusAPI:
'SetFocusAPI Products.hwnd
end if
Employee类似。
Set Products = New F_DataAccess
Private Declare Function SetFocusAPI Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
菜单代码上没必要判断Visible是否为真:Private Products As New F_DataAccess
Private Employees As New F_DataAccessMenuProducts菜单的事件过程改为:
With Products
.WindowTitle = "产品"
.TableId = dtTableId.dtProducts
.Show
End With另外,F_DataAccess的Unload事件中可以加上以下代码:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = vbFormControlMenu Then
Cancel = True
Me.Hide
End If
End Sub这样可以避免Products和Employees对象被频繁地Unload和Load
http://download.csdn.net/source/162250
midi数字音乐编辑软件。
1、使用MDI子窗体,可以打开多个midi文件。比如001.mid,002.mid
2、如果选择的文件已经打开时比如001.mid,直接让已经打开001.mid的MDI子窗体显示在最前端。并且获得焦点,如果此时001.mid已经被修改过,则会提示:“此文件已经打开,并且已经修改,放弃修改重新打开001.mid文件?”,VByes,vbno
3、选择打开其他文件比如003.mid没有什么提示直接在新的子窗体中打开显示并获得焦点。
With Products
.WindowTitle = "职员"
.TableId = dtTableId.dtEmployees
.Show
End With
————————————————————————
把Dim Employees As New F_DataAccess
改为:public Employees As New F_DataAccess放在模块里
菜单事件:
if Employees is nothing then
set Employees =new F_DataAccess
Employees .show
else
Employees .得到焦点 '那个函名记不住名了,嘿
end if
另外在这个窗体关闭时要释放自己,unload me(vb6里行,不知道VBA里是不是这样)
不过还是谢谢各位的热心解答.