我在工程、窗體、控件刪除事件中有代碼。
結果以VB關閉,或工程關閉時,也會觸發。如果獲得這二個事件或消息。

解决方案 »

  1.   

    AddInstance是工程中实现同VB接口的对象。在程序中对应AddInstance包含两个方法:OnConnection和OnDisconnection。在这里我们称它们为方法而不是事件,是因为它们是由VB调用而不是由某个消息引发而由系统调用的。楼主可研究一下OnDisconnection。
    另外看看这个:
    http://www.cittm.net/Article/sheji/vb/200601/1661.html
      

  2.   

    http://www.onlinedown.net/soft/46960.htm 写着玩的
      

  3.   

    感謝樓上的二位回復。
    VB6的插件製作已經沒問題。當用戶刪除控件、窗體、工程時,
    我需要及時更新數據庫裏的資料,
    這也能做到。現在問題在於,當我關閉VB,或關閉工程時,
    注意,不是刪除。
    但VB本身會移除控件、窗體、工程,
    這也會觸發事件。也就是說,我現在無法判斷是刪除,還是由於關閉工程或VB時觸發這個事件的。
      

  4.   

    Private WithEvents m_oHandlerOfProjectEvent As VBProjectsEvents
    Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
        On Error GoTo Error_Handler
        
        'save the vb instance
        Set VBInstance = Application
        
        If ConnectMode = ext_cm_External Then
            'Used by the wizard toolbar to start this wizard
            '
        Else
            Set m_oHandlerOfProjectEvent = VBInstance.Events.VBProjectsEvents()
        End If
      
        Exit Sub
        
    Error_Handler:
        
        MsgBox Err.Description
        
    End SubPrivate Sub m_oHandlerOfProjectEvent_ItemActivated(ByVal VBProject As VBIDE.VBProject)
        MsgBox VBProject.Name & "激活"
    End SubPrivate Sub m_oHandlerOfProjectEvent_ItemAdded(ByVal VBProject As VBIDE.VBProject)
        MsgBox VBProject.Name & "打开"
    End SubPrivate Sub m_oHandlerOfProjectEvent_ItemRemoved(ByVal VBProject As VBIDE.VBProject)
        MsgBox VBProject.Name & "关闭"
    End SubPrivate Sub m_oHandlerOfProjectEvent_ItemRenamed(ByVal VBProject As VBIDE.VBProject, ByVal OldName As String)
        MsgBox VBProject.Name & "重命名"
    End Sub
      

  5.   

    超级绿豆,谢谢你的回复。
    你写的我已经做到了,
    我现在需要区别删除工程的前面操作是什么?
    是用菜单删除?还是移除工程?
    还是由于关闭VB?这些操作都是引发你写的这些事件,
    我现在需要区别是哪些操作引发的。比如ItemRemoved,你用菜单删除,用菜单移除,关闭VB,新建工程,
    这些都会触发ItemRemoved,我现在需要分清是哪个触发的。
      

  6.   

    老实说偶木有发现怎么用菜单删除工程的,另外对于菜单操作的话我们可以给设个handler拦截这个操作
    比如新建操作Private WithEvents moHandlerOfNewProjectBtn As CommandBarEvents
    Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
        On Error GoTo Error_Handler
        
        'save the vb instance
        Set VBInstance = Application    If ConnectMode = ext_cm_External Then
            'Used by the wizard toolbar to start this wizard
            '
        Else
            Set moHandlerOfNewProjectBtn = VBInstance.Events.CommandBarEvents(VBInstance.CommandBars("菜单条").Controls("文件(&F)").Controls("新建工程(&N)"))    End If
      
        Exit Sub
        
    Error_Handler:
        
        MsgBox Err.Description
        
    End Sub
    Private Sub moHandlerOfNewProjectBtn_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean)
        MsgBox "新建工程"
    End Sub
      

  7.   

    至于点关闭的话,我暂时还木有想到除了子类处理ide窗口外更好的办法