我有一组体面的数据需要存储在活动记录中。为了预先填充页面上的表单字段,我已经编写了以下代码:
Device device = new Device(DeviceID); // device is simply the active record
txtDeviceName.Text = device.Name;
txtNotes.Text = device.Notes;
txtHostName.Text = device.Hostname;
txtAssetTag.Text = device.AssetTag;
txtSerialNumber.Text = device.SerialNumber;
// snip... the list goes on!
是否有某种方法(内置功能,宏等)可用于交换表达式的每一面,以便将数据保存到活动记录中,而不是按顺序读取执行数据库插入?例如,在突出显示上述代码并运行宏之后,它将变为:
device.DeviceName = txtDeviceName.Text;
device.Notes = txtNotes.Text;
device.Hostname = txtHostName.Text;
device.AssetTag = txtAssetTag.Text;
device.SerialNumber = txtSerialNumber.Text;
// snip again...
由于此活动记录封装的数据库中的列数相当大,因此通过简单的自动化过程可以避免大多数此类型的输入。
显然这不会100%有效,因为有时必须进行类型转换(例如int
到string
),但在大多数情况下我认为这会节省很多时间。 / p>
答案 0 :(得分:10)
这是一个可以执行此操作的宏:
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.Text.RegularExpressions
Public Module Helpers
Sub SwapAssignment()
If (Not IsNothing(DTE.ActiveDocument)) Then
Dim selection As TextSelection = CType(DTE.ActiveDocument.Selection, TextSelection)
selection.Text = Regex.Replace(selection.Text, "([^\s]*)\s*=\s*([^\s]*);", "$2 = $1;")
End If
End Sub
End Module
基本上它采用所选文本(选择一行或多行)并使用正则表达式交换值。不漂亮,但宏从来都不是。
答案 1 :(得分:0)
无法让它与Regex一起使用(必须是visualstudio 2010的东西) 我用旧式的方式做了经典拆分。它还包括一个跳过VB和c#注释行的检查。 发布给任何可能需要它的人..
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.Text.RegularExpressions
Public Module Helpers
Sub SwapAssignment()
If (Not IsNothing(DTE.ActiveDocument)) Then
Dim selection As TextSelection = CType(DTE.ActiveDocument.Selection, TextSelection)
Dim lineArray() = selection.Text.Split(vbCrLf)
Dim output = ""
For Each line As String In lineArray
line = line.Trim()
If line.Length >= 1 Then
If line.Substring(0, 1).Equals("'") OrElse line.Substring(0, 1).Equals("/") Then
output &= line & vbCrLf
Continue For
End If
End If
If line.Contains(" = ") Then
Dim splittedline = line.Split("=")
output &= splittedline(1) + " = " + splittedline(0) & vbCrLf
Else
output &= line & vbCrLf
End If
Next
Dim check = output
selection.Text = output
End If
End Sub
End Module