EnvironmentEvent宏没有完成(EnvironmentEvent macro doesn

2019-09-17 03:07发布

我在Visual Studio 2008年工作,我想为编辑>大纲>崩溃定义,每当我打开一个文件来运行。 如果,在此之后,所有区域都扩大了这将是很好。 我想,Kyralessa在评论提供的代码与代码折叠的问题 ,而且工作非常漂亮,因为我有手动运行的宏。 我试图扩大该宏作为通过将下面的代码在宏IDE的EnvironmentEvents模块中的事件:

Public Sub documentEvents_DocumentOpened(ByVal Document As EnvDTE.Document) Handles DocumentEvents.DocumentOpened
    Document.DTE.ExecuteCommand("Edit.CollapsetoDefinitions")
    DTE.SuppressUI = True
    Dim objSelection As TextSelection = DTE.ActiveDocument.Selection
    objSelection.StartOfDocument()
    Do While objSelection.FindText("#region", vsFindOptions.vsFindOptionsMatchInHiddenText)
    Loop
    objSelection.StartOfDocument()
    DTE.SuppressUI = False
End Sub

然而,这似乎并没有做任何事情,当我从我的VS.解决方案打开一个文件 要测试宏被越来越来看,我把MsgBox()语句在子程序,发现代码之前Document.DTE.ExecuteCommand("Edit.CollapsetoDefinitions")运行良好,但似乎没有什么是线后遭到袭击。 当我调试和子程序中设置断点,我会打F10继续到下一行和控制将尽快为离开子程序ExecuteCommand线运行。 尽管如此,该行似乎什么都不做,也就是说,它不会倒塌大纲。

我只用也尝试DTE.ExecuteCommand("Edit.CollapsetoDefinitions")的子程序中,但没有运气。

这个问题试图获得相同的最终结果这一个 ,但我要问什么,我可能会在我的事件处理宏错误行为。

Answer 1:

问题是,该文件是不是事件触发时真正活跃。 一个解决方案是使用“火一次”计时器DocumentOpened发生事件后执行的代码在短暂的延迟:

Dim DocumentOpenedTimer As Timer

Private Sub DocumentEvents_DocumentOpened(ByVal Document As EnvDTE.Document) Handles DocumentEvents.DocumentOpened
    DocumentOpenedTimer = New Timer(AddressOf ExpandRegionsCallBack, Nothing, 200, Timeout.Infinite)
End Sub

Private Sub ExpandRegionsCallBack(ByVal state As Object)
    ExpandRegions()
    DocumentOpenedTimer.Dispose()
End Sub

Public Sub ExpandRegions()
    Dim Document As EnvDTE.Document = DTE.ActiveDocument
    If (Document.FullName.EndsWith(".vb") OrElse Document.FullName.EndsWith(".cs")) Then
        If Not DTE.ActiveWindow.Caption.ToUpperInvariant.Contains("design".ToUpperInvariant) Then
            Document.DTE.SuppressUI = True
            Document.DTE.ExecuteCommand("Edit.CollapsetoDefinitions")
            Dim objSelection As TextSelection = Document.Selection
            objSelection.StartOfDocument()
            Do While objSelection.FindText("#region", vsFindOptions.vsFindOptionsMatchInHiddenText)
            Loop
            objSelection.StartOfDocument()
            Document.DTE.SuppressUI = False
        End If
    End If
End Sub

我没有测试过广泛的,所以可能会有一些错误......而且,我添加了一个检查,以验证活动文档是一个C#或VB源代码(不是VB虽然测试),并且它不是在设计模式。
无论如何,希望它为你的作品?



文章来源: EnvironmentEvent macro doesn't complete