Vb.net VS 2010宏-从这里到那里选择

Vb.net VS 2010宏-从这里到那里选择,vb.net,visual-studio,macros,Vb.net,Visual Studio,Macros,我正在编写一个宏,以便用下划线替换代码文件中字符串中的空格。我已经找到了字符串的开头和结尾作为VirtualPoint的实例。现在我尝试从第一个VirtualPoint到第二个。我想不出来 我知道VirtualPoints是正确的,因为我使用的是MessageBox.Show,以便在运行宏时告诉我它们的值。我只是不知道将TextSelection从第一个设置到第二个的正确命令。我试过这个: selection.MoveToPoint(firstVirtualPoint) selection.Mo

我正在编写一个宏,以便用下划线替换代码文件中字符串中的空格。我已经找到了字符串的开头和结尾作为
VirtualPoint
的实例。现在我尝试从第一个
VirtualPoint
到第二个。我想不出来

我知道
VirtualPoint
s是正确的,因为我使用的是MessageBox.Show,以便在运行宏时告诉我它们的值。我只是不知道将
TextSelection
从第一个设置到第二个的正确命令。我试过这个:

selection.MoveToPoint(firstVirtualPoint)
selection.MoveToPoint(secondVirtualPoint, True)
这似乎应该行得通,但行不通。光标刚好移动到行的末尾(据我所知)


有人知道这样做的正确命令吗?

由于这些事情往往会发生,在我放弃之后,突然它击中了我。不过,也许这会帮助其他人

更完整的代码示例如下:

Dim selection As TextSelection = 
    CType(DTE.ActiveDocument.Selection, TextSelection)
selection.StartOfLine()

selection.FindText("some string at start")
Dim pointAfterStart = selection.BottomPoint

selection.FindText("some string at end")
Dim pointBeforeEnd = selection.TopPoint

selection.MoveToPoint(pointAfterIt)
selection.MoveToPoint(pointBeforeLambda, True)
其思想是先找到初始文本,然后找到结束文本,然后选择中间的所有内容。我在调试器中发现pointAfterStart和pointBeforeEnd中的值正在更改。可能是被名称欺骗了(因为
System.Drawing.Point
是一个struct),我没有意识到它们是指向当前选择位置的引用

我是这样解决的:

selection.FindText("It ")
Dim pointAfterIt = selection.BottomPoint.CreateEditPoint

selection.FindText(" = () =>")
Dim pointBeforeLambda = selection.TopPoint.CreateEditPoint
这将创建选择点的副本,以便在稍后移动选择时它们不会更改