1 votes

Macro VS 2010 - sélectionner d'ici à là

J'écris une macro qui me permet de remplacer les espaces d'une chaîne de caractères dans mon fichier de code par des caractères de soulignement. J'ai réussi à trouver le début et la fin de la chaîne en tant qu'instances de VirtualPoint . Maintenant, j'essaie de sélectionner à partir du premier VirtualPoint au second. Et je n'arrive pas à comprendre.

Je sais que le VirtualPoint sont corrects, car j'utilise MessageBox.Show pour m'indiquer leurs valeurs lorsque je lance la macro. J'ignore simplement quelle est la commande correcte pour définir l'option TextSelection du premier au second. J'ai essayé ceci :

selection.MoveToPoint(firstVirtualPoint)
selection.MoveToPoint(secondVirtualPoint, True)

Cela semble devoir fonctionner, mais ce n'est pas le cas. Le curseur se déplace simplement à la fin de la ligne (pour autant que je puisse le dire).

Quelqu'un connaît-il la commande correcte pour faire cela ?

2voto

Kyralessa Points 76456

Comme ces choses ont tendance à se passer, après avoir abandonné, tout à coup ça me frappe. Peut-être que cela aidera quelqu'un d'autre, cependant.

Voici un exemple plus complet de ce code :

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)

L'idée est de trouver le texte initial, puis le texte final, et enfin de sélectionner tout ce qui se trouve entre les deux. Dans le débogueur, j'ai constaté que les valeurs de pointAfterStart et de pointBeforeEnd étaient les suivantes en changeant . Peut-être trompé par le nom (puisque System.Drawing.Point est un struct), je ne réalisais pas qu'il s'agissait de références qui pointaient vers le actuel position de sélection.

Je l'ai résolu de cette façon :

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

selection.FindText(" = () =>")
Dim pointBeforeLambda = selection.TopPoint.CreateEditPoint

Cela a permis de faire des copies des points de sélection, de sorte qu'ils ne changent pas lorsque la sélection est déplacée ultérieurement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X