Функция формата VB6: аналог в .NET - PullRequest
4 голосов
/ 22 января 2010

Существует функция String.Format, упоминаемая в документации как аналог функции Format из VB6. Также имеется функция 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 потеряны, кажется, что эта функция устарела «тихо».

Есть ли в фреймворке что-то, что может делать этот тип форматирования?

Ответы [ 5 ]

4 голосов
/ 03 февраля 2010

Другое решение, на которое стоит обратить внимание, - это использование пространства имен Microsoft.VisualBasic.Compatibility.VB6, которое содержит несколько классов и методов, обратно совместимых с Visual Basic 6. Он в первую очередь предназначен для инструментов обновления, но избавит вас от хлопот о необходимости приобрести инструмент миграции или написать код самостоятельно.

Документация MSDN: Метод поддержки. Формат (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 голосов
/ 22 января 2010

Эта страница MSDN , кажется, подтверждает, что поддержка была прекращена с VB6 до VB.NET. Вам придется реализовать его самостоятельно, поискать в Интернете какой-нибудь сторонний код или (желательно) переписать код для использования String.Format и / или ToUpper / ToLower.

Ваш последний пример будет выглядеть примерно так:

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

Вы можете реализовать свой собственный IFormatProvider для поддержки прописных и строчных букв в форматных строках, но я не уверен, стоит ли это делать.

1 голос
/ 22 января 2010

VBMigration.com предлагает коммерческое решение для миграции VB6 на VB.Net. Их веб-сайт документирует различные различия в поведении между версиями VB6 Format и VB.Net, включая версии из этого вопроса.

Если вы купите инструмент VB Migration Partner , ваш код VB6 Format будет перенесен для использования библиотеки времени выполнения функция Format6, которая имитирует поведение VB6 Format , Я никогда не использовал их инструмент, но он звучит великолепно. Если у вас много кода, я думаю, это может сэкономить серьезные деньги.

1 голос
/ 22 января 2010

Это функция Format из пространства имен VisualBasic, которая должна быть как можно ближе к функции Format из VB 6, так что именно там вы, возможно, будете искать такой тип форматирования строк.

Метод String.Format разработан независимо от какого-либо конкретного языка наследования. Любые функции, которые он наследует от VB 6 (или других языков), основаны на таких вещах, как их полезность, и не должны быть обратно совместимыми.

0 голосов
/ 05 апреля 2011

Можно использовать

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

...