我希望能够剪切/复制像“< strong> {0}< / strong>”这样的字符串例如。
然后我想选择一些代码,例如“Hello,World”,然后调用一个宏,这将导致“< strong> Hello,World< / strong>”。
你怎么能这样做?
更新:为什么我要这样做?
我可以创建一个宏或快捷方式来添加特定内容,例如< strong>标记到选择。但是,我的想法是动态创建任何类型的“环绕”粘贴行为。
通常,我会粘贴一个字段或属性列表。所以从其他地方我得到
PersonID
FirstName
LastName
作为一个例子,我知道我想把它们设置为
FieldName = dataRow("FieldName").Value
使用我的魔术宏,我可以选择以下内容并按CTRL + C将其放入剪贴板中:
{0} = dataRow("{0}").Value
然后我要做的就是逐行去并使用我的魔术贴。
答案 0 :(得分: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
我借用了剪贴板代码from here。
这确实有效。我在一个文本文件上测试它,将您的格式字符串复制到剪贴板(ctrl-c),突出显示要格式化的文本,然后运行宏(我只是从宏浏览器双击它,但你可以创建一个键盘快捷键)
答案 1 :(得分:0)
定义一个在所选文本周围添加“强”标签的宏不是更好吗?然后你可以将它分配给Ctrl + B或其他任何东西。
必须选择两个文本块并调用两次宏似乎对我来说太辛苦了。
(也许你需要解释为什么你想要这样做)
答案 2 :(得分:0)
而不是{0},我使用&amp ;.将宏指定给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