2009-03-19 8 views
2

Je voudrais pouvoir couper/copier une chaîne comme "< fort> {0} </strong>" par exemple.Visual Studio Macro à coller semblable à String.Format

Je voudrais ensuite sélectionner du code tel que "Hello, World" puis invoquer une macro qui se traduira par "< strong> Bonjour, World </strong>".

Comment pourriez-vous faire cela?

Mise à jour: Pourquoi est-ce que je veux faire ceci?

Je pourrais juste faire une macro ou un raccourci pour ajouter quelque chose de spécifique comme un tag fort> < à une sélection. Cependant, mon idée de créer une sorte de "coller avec" coller le comportement à la volée.

Assez souvent, je colle dans une liste de champs ou de propriétés. Donc, d'ailleurs je me

PersonID 
FirstName 
LastName 

Et tout comme un exemple, je sais que je veux mettre les comme

FieldName = dataRow("FieldName").Value 

Avec ma macro magie, je pouvais sélectionner les éléments suivants et appuyez sur CTRL + C pour l'obtenir dans mon presse-papiers:

{0} = dataRow("{0}").Value 

Alors tout ce que je dois faire est d'aller ligne par ligne et appliquer ma pâte magique.

Répondre

1

Fun petit projet. J'ai emprunté le code from here.

Cela ne fonctionne pas. Je l'ai testé sur un fichier texte, copiez votre chaîne de formatage dans le presse-papiers (ctrl-c), sélectionnez le texte que vous souhaitez formater, puis exécutez la macro (je l'ai double-clic dans l'explorateur de macros mais vous pouvez créer un raccourci clavier) .

+0

Trop complexe, aucune gestion des erreurs et ne prend pas en charge l'annulation. – AMissico

+1

@AMissico, ce n'est pas WriteMyEntireProgramForMe.com, c'est SO, et les extraits de code incomplets qui montrent les bases de la façon de faire quelque chose, sans erreur de gestion et d'autres "bonnes pratiques programmeur" est la norme et sont laissés comme un exercice pour le lecteur/questionneur. –

0

Ne serait-il pas préférable de définir une macro qui ajoute les balises «fortes» autour du texte sélectionné? Ensuite, vous pouvez l'assigner à Ctrl + B ou autre chose. Doit sélectionner les deux morceaux de texte et invoquer deux fois la macro semble trop dur pour moi.

(vous devez peut-être expliquer pourquoi vous voulez faire)

0

Au lieu de {0}, j'utilise &. Assignez la macro à Ctrl + Q et vous êtes tous ensemble!

' Wraps the current selection with the specified text. Use the & character as the anchor for the selected text. 
Public Sub WrapSelection() 
    Dim selection As TextSelection = DirectCast(DTE.ActiveDocument.Selection, TextSelection) 
    DTE.UndoContext.Open("Wrap Selection") 

    Try 
     Dim sInput As String = InputBox("Wrap(&&, state)") 
     If Len(sInput) > 0 Then 
      Dim sContent As String = selection.Text 
      Dim iStart As Integer = InStr(sInput, "&") - 1 
      Dim iEnd As Integer = InStrRev(sInput, "&") 
      selection.Insert(sInput.Substring(0, iStart) + sContent + sInput.Substring(iEnd), vsInsertFlags.vsInsertFlagsContainNewText) 
      'selection.Insert(sInput.Substring(iEnd), vsInsertFlags.vsInsertFlagsInsertAtEnd) 
     End If 

    Catch ex As Exception 
     DTE.UndoContext.SetAborted() 
     MsgBox(ex.Message) 

    Finally 
     'If an error occured, then need to make sure that the undo context is cleaned up. 
     'Otherwise, the editor can be left in a perpetual undo context 
     DTE.UndoContext.Close() 

    End Try 

End Sub 
Questions connexes