Visual studio DTE.ExecuteCommand(“Edit.NextBookmark”)

Visual studio DTE.ExecuteCommand(“Edit.NextBookmark”),visual-studio,visual-studio-macros,Visual Studio,Visual Studio Macros,使用VS2010 回答感谢汉斯(因为我要用8小时来回答我自己的问题) 我有一个宏,可以在每个书签上设置断点。它工作(像一把大锤)。。。但是出于好奇,我应该如何做下面的一项,以便使用“适当的”For循环 检索书签对象列表(表面上带有行号属性) 检查DTE.ExecuteCommand(“Edit.NextBookmark”)是否返回false或某些表示我已到达最后一个书签的指示 使用特定的“查询”检索书签对象列表,这样我就不必首先删除所有当前书签 当前代码 Public Module BookMa

使用VS2010

回答感谢汉斯(因为我要用8小时来回答我自己的问题)

我有一个宏,可以在每个书签上设置断点。它工作(像一把大锤)。。。但是出于好奇,我应该如何做下面的一项,以便使用“适当的”For循环

  • 检索书签对象列表(表面上带有行号属性)
  • 检查DTE.ExecuteCommand(“Edit.NextBookmark”)是否返回false或某些表示我已到达最后一个书签的指示
  • 使用特定的“查询”检索书签对象列表,这样我就不必首先删除所有当前书签
  • 当前代码

    Public Module BookMarksToBreakPoints
    
    
        Sub TemporaryMacro()
            Dim bookmarkWin As Window = DTE.Windows.Item(WindowKinds.vsWindowKindBookmarks)
    
            While True
                Try
                    DTE.ExecuteCommand("Edit.NextBookmark")
                    DTE.ExecuteCommand("Edit.ToggleBookmark")
                    DTE.ExecuteCommand("Debug.ToggleBreakpoint")
                Catch e As Exception
                    MsgBox("Done")
                    Exit While
                End Try
            End While
    
        End Sub
    End Module
    

    感谢汉斯·帕桑朝着正确的方向努力。最后一个宏:

    Sub CreateBreakPoint()
    
        Dim doc As TextDocument = _
                CType(DTE.ActiveDocument.Object("TextDocument"), TextDocument)
        Dim point As EditPoint = doc.StartPoint.CreateEditPoint
    
        While point.NextBookmark()
            Try
                point.ClearBookmark()
                DTE.Debugger.Breakpoints.Add("", DTE.ActiveDocument.FullName, point.Line(), 1, "", dbgBreakpointConditionType.dbgBreakpointConditionTypeWhenTrue, "c#", "", 0, "", 0, dbgHitCountType.dbgHitCountTypeNone)
            Catch ex As Exception
                MsgBox("error: " + ex.Message)
            End Try
        End While
        MsgBox("Done")
    
    End Sub
    

    使用EditPoint2.NextBookmark()。它返回一个布尔值。@HansPassant就是这样。谢谢
    Sub CreateBreakPoint()
    
        Dim doc As TextDocument = _
                CType(DTE.ActiveDocument.Object("TextDocument"), TextDocument)
        Dim point As EditPoint = doc.StartPoint.CreateEditPoint
    
        While point.NextBookmark()
            Try
                point.ClearBookmark()
                DTE.Debugger.Breakpoints.Add("", DTE.ActiveDocument.FullName, point.Line(), 1, "", dbgBreakpointConditionType.dbgBreakpointConditionTypeWhenTrue, "c#", "", 0, "", 0, dbgHitCountType.dbgHitCountTypeNone)
            Catch ex As Exception
                MsgBox("error: " + ex.Message)
            End Try
        End While
        MsgBox("Done")
    
    End Sub