我在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")
的子程序中,但没有运气。
这个问题试图获得相同的最终结果这一个 ,但我要问什么,我可能会在我的事件处理宏错误行为。
问题是,该文件是不是事件触发时真正活跃。 一个解决方案是使用“火一次”计时器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虽然测试),并且它不是在设计模式。
无论如何,希望它为你的作品?