9

我有一组体面的数据需要存储在活动记录中。为了预先填充页面上的表单字段,我已经编写了以下代码:

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% 起作用,因为有时必须进行类型转换(例如intto string),但在大多数情况下,我认为这会节省大量时间。

4

2 回答 2

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

基本上,它采用选定的文本(一行或您选择的多行)并使用正则表达式来交换值。不漂亮,但宏永远不会。

于 2009-03-13T17:28:17.727 回答
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
于 2012-05-31T13:19:38.107 回答