VB6格式功能:.NET中的模拟

问题描述 投票:0回答:6

有一个

String.Format
函数,在文档中被称为 VB6 中
Format
函数的模拟。
Format
命名空间中还有
VisualBasic
函数,它是为了兼容性而提供的,并且基本上具有与
String.Format
相同的功能。

确实,这两种格式的日期和数字。

但是VB6的函数也可以格式化字符串:

? format$("hi there", ">")
HI THERE
? format$("hI tHeRe", "<")
hi there
? format$("hi there", ">!@@@... not @@@@@")
HI ... not THERE
就我而言,

String.Format
无法做到这一点,新的
Format
也无法做到这一点。我在兼容性
Format
文档中也找不到任何提及 VB6 功能的某些部分丢失的信息,似乎该功能已“默默”被弃用。

框架中是否有任何东西可以进行这种类型的格式化?

.net vb.net string-formatting vb6-migration
6个回答
5
投票

另一个需要考虑的解决方案是使用 Microsoft.VisualBasic.Compatibility.VB6 命名空间,其中包含几个向后兼容 Visual Basic 6 的类和方法。它主要用于升级工具,但它可以让您省去使用 Visual Basic 6 的麻烦。购买迁移工具或自己编写代码。

MSDN 文档:Support.Format 方法 (Microsoft.VisualBasic.Compatibility.VB6)

参数不会改变,并且至少在给定示例的情况下它基本上支持相同的功能:

Imports Microsoft.VisualBasic.Compatibility.VB6

Console.WriteLine("HI THERE ")
Console.WriteLine(Support.Format("hi there", ">"))

Console.WriteLine("hi there ")
Console.WriteLine(Support.Format("hI tHeRe", "<"))

Console.WriteLine("HI ... not THERE")
Console.WriteLine(Support.Format("hi there", ">!@@@... not @@@@@"))

2
投票

这个 MSDN 页面 似乎证实了对 VB6 的支持已取消到 VB.NET。您必须自己实现它,在互联网上查找一些第三方代码或(最好)重写代码以使用

String.Format
和/或
ToUpper
/
ToLower

你的最后一个例子是这样的:

myString = String.Format("{0,-3}... not {1,-5}", "hi".ToUpper(), "there".ToUpper())

您可以实现自己的

IFormatProvider
来通过格式字符串支持大写和小写,但我不确定这样做是否值得。


1
投票

它是

Format
命名空间中的
VisualBasic
函数,应该尽可能接近 VB 6 中的
Format
函数,因此您可能会在其中寻找这种字符串格式。

String.Format
方法的开发独立于任何语言特定的继承。它从 VB 6(或其他语言)继承的任何功能都是基于诸如它们的实用性之类的东西,而不是向后兼容。


1
投票

VBMigration.com 有一个将 VB6 迁移到 VB.Net 的商业解决方案。他们的网站记录了 VB6 Format

 和 VB.Net 版本之间的各种行为差异,包括这个问题中的差异。 

如果您

购买他们的 VB 迁移合作伙伴工具,您的 VB6 Format

 代码将被迁移以使用模拟 VB6 
Format6 行为的运行时库
函数
Format
。我从未使用过他们的工具,但听起来很棒。如果您有很多代码,我认为它可以节省大量资金。


0
投票
.NET

String.Format

Microsoft.VisualBasic.Format
 方法确实缺乏应用 VB6 的 
Format
 函数提供的字符串特定格式的功能,例如强制大写、小写或混合大小写,如示例中所示。正如您所注意到的,以这种微妙的方式格式化字符串的能力被删除了,而没有太多提及。

但是,您可以使用 .NET 中的其他方法来实现类似的功能: 您可以手动操作字符串来达到类似的效果。例如:

Dim original As String = "hi there" Dim upperCase As String = original.ToUpper() Dim lowerCase As String = original.ToLower()
您可以编写一个辅助函数来模仿 VB6 的一些字符串格式化功能。例如,要处理大写、小写或自定义模式的混合,您可以创建类似的内容:

Function FormatString(input As String, format As String) As String Select Case format Case ">" Return input.ToUpper() Case "<" Return input.ToLower() Case ">!" Return StrConv(input, VbStrConv.ProperCase) ' You can add more patterns here as needed Case Else Return input ' Default case End Select End Function
' Example usage:
Console.WriteLine(FormatString("hi there", ">")) ' Outputs: HI THERE
Console.WriteLine(FormatString("hI tHeRe", "<")) ' Outputs: hi there
对于更复杂的格式模式(如

format$("hi there", ">!@@@... not @@@@@")

),请考虑使用正则表达式。以下是如何替换自定义模式的示例:

Function CustomFormat(input As String, pattern As String) As String ' Example: Replace @ with actual input text Dim result As String = pattern.Replace("@", input) If pattern.Contains(">") Then result = result.ToUpper() ElseIf pattern.Contains("<") Then result = result.ToLower() End If Return result End Function ' Example usage: Console.WriteLine(CustomFormat("hi there", ">!@@@... not @@@@@")) ' This would output: HI ... not THERE

StrConv

 可以帮助处理一些旧的字符串格式。它包括 
VbStrConv.Uppercase
VbStrConv.Lowercase
VbStrConv.ProperCase
 等选项:

Dim result As String = StrConv("hi there", VbStrConv.Uppercase) ' Outputs: HI THERE
这些都不能直接替代 VB6 的 

Format

,但它们一起可以帮助复制丢失的功能。如果您经常使用这种类型的字符串格式,那么使用上述函数创建一个小型实用程序类将使您的代码更易于管理。


-1
投票
可以使用吗

Dim value As Double value = 1.2 TextBox1.Text = (value.ToString("0.00",System.Globalization.CultureInfo.InvariantCulture))

更多信息

http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#Y3200

© www.soinside.com 2019 - 2024. All rights reserved.