Vb.net 格式化序列号类型的字符串
我希望格式化一个Vb.net 格式化序列号类型的字符串,vb.net,format,string-formatting,Vb.net,Format,String Formatting,我希望格式化一个字符串,以显示为序列号,例如 abc12345d67890 到 如果是数字,我可以 DataGridView.Columns(2).DefaultCellStyle.Format = "0000-0000-0000-0000" MaskedTextBox1.Mask = ("0000-0000-0000-0000") 但是如果它是一个字符串,这就不起作用了。有人能帮我找个方向吗 信息以16个字符显示,以便于阅读和理解。某些值为2AFHY89,因此必须记录 它以多种不同的方式/
字符串
,以显示为序列号,例如
abc12345d67890
到
如果是数字,我可以
DataGridView.Columns(2).DefaultCellStyle.Format = "0000-0000-0000-0000"
MaskedTextBox1.Mask = ("0000-0000-0000-0000")
但是如果它是一个字符串
,这就不起作用了。有人能帮我找个方向吗
0000-0000-0000-0000
”)您可以用零填充序列号以获得完整的16个字符,然后将其拆分为4个字符的部分,然后将这些部分之间用“-”连接起来
Dim serial As String = "abc12345d67890"
serial = serial.PadLeft(16, "0"c)
Dim parts(3) As String
parts(3) = serial.Substring(serial.Length - 3)
parts(2) = serial.Substring(serial.Length - 7, 4)
parts(1) = serial.Substring(serial.Length - 11, 4)
parts(0) = serial.Substring(0, serial.Length - 12)
Dim formattedSerial As String = String.Join("-", parts)
如果你想在前面加上“00”,即使是暂时在函数中也可以。如果它是某种填充,则在长度需要时将其添加到过程中(问题不清楚它是否确实是左填充)
用法:
thatTextBox.Text = FormatSerial("S","abc12345d67890")
Console.WriteLine(FormatSerial("S", strSerial))
输出:
00ab-c123-45d6-7890
它的作用类似于IFormatProvider
,但以共享函数的形式。在其他情况下,实际的IFormatProvider
可能更好
笔记
“R”
这与问题无关,但GUID是否更适合您的需要?我不希望编辑该值,只希望更改其显示方式,但谢谢,我将这样做。是的,它将保留空白。我的想法是我会经常使用这个答案。存储的值仅为“abc12345d67890”‘一个字符串’,答案将以多种方式显示,例如textbox DataGrid。我编辑了这个问题,希望能让它更容易理解。谢谢你的帮助。DGV数据绑定了吗?您可能会看到是否可以使用CellFormatting事件根据需要显示它。在编辑中,
2AFHY89
会有9个前导零吗?是的,你能举个例子吗?现在是凌晨1:42,我会尝试后面的方法
Shared Function FormatSerial(fmt As String, ser As String) As String
Dim serial As String
'ToDo: pad L or R as desired, or
' throw an exception when the length is not as expected.
serial = ("000000000000000").Substring(0, 16 - ser.Length) & ser
Select Case fmt.ToUpper
Case "S"
Return String.Format("{0}-{1}-{2}-{3}", serial.Substring(0, 4),
serial.Substring(4, 4), serial.Substring(8, 4),
serial.Substring(12, 4))
Case Else
Throw New FormatException(
String.Format("The '{0}' format specifier is not supported.", fmt))
End Select
End Function
thatTextBox.Text = FormatSerial("S","abc12345d67890")
Console.WriteLine(FormatSerial("S", strSerial))