2

例如,我希望能够剪切/复制像“<strong>{0}</strong>”这样的字符串。

然后我想选择一些代码,例如“Hello, World”,然后调用一个宏,这将导致“<strong>Hello, World</strong>”。

你怎么能这样?

更新:我为什么要这样做?

我可以制作一个宏或快捷方式来添加特定的东西,如 <strong> 标记到选择中。但是,我的想法是动态创建任何类型的“环绕”粘贴行为。

我经常粘贴字段或属性列表。所以我从其他地方得到

PersonID
FirstName
LastName

举个例子,我知道我想将它们设置为

FieldName = dataRow("FieldName").Value

使用我的魔术宏,我可以选择以下内容并按 CTRL+C 将其放入我的剪贴板:

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

然后我所要做的就是一行一行地涂抹我的魔法膏。

4

3 回答 3

1

有趣的小项目。

Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module StringFormatModule

    Private clipText As String

    Public Property ClipboardText() As String
        Get
            RunThread(AddressOf GetClipboardText)
            Return clipText
        End Get
        Set(ByVal value As String)
            clipText = value
            RunThread(AddressOf CopyToClipboard)
        End Set
    End Property

    Private Function RunThread(ByVal fct As Threading.ThreadStart)
        Dim thread As New Threading.Thread(fct)
        thread.ApartmentState = Threading.ApartmentState.STA

        thread.Start()
        thread.Join()
    End Function

    Private Sub GetClipboardText()
        clipText = My.Computer.Clipboard.GetText()
    End Sub

    Private Sub CopyToClipboard()
        My.Computer.Clipboard.SetText(clipText)
    End Sub

    Sub FormatSelectedTextWithCopiedText()
        Dim formatString As String

        formatString = ClipboardText

        Dim token As String
        Dim selectedText As TextSelection
        selectedText = DTE.ActiveDocument.Selection
        token = selectedText.Text
        selectedText.Text = String.Format(formatString, token)
    End Sub
End Module

我从这里借了剪贴板代码。

这确实有效。我在一个文本文件上对其进行了测试,将您的格式字符串复制到剪贴板(ctrl-c),突出显示要格式化的文本,然后运行宏(我只是从宏资源管理器中双击它,但您可以制作键盘快捷键) .

于 2009-03-20T15:25:13.047 回答
0

定义一个在所选文本周围添加“强”标签的宏不是更好吗?然后你可以将它分配给 Ctrl+B 或其他。

必须选择两个文本块并两次调用宏对我来说似乎太辛苦了。

(也许您需要解释为什么要这样做)

于 2009-03-19T22:27:16.767 回答
0

我使用 & 而不是 {0}。将宏分配给 Ctrl+Q,一切就绪!

' 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
于 2009-09-03T17:44:07.130 回答