2016-08-08 2 views
1

Date Character SpacingКак увеличить/уменьшить дата символов интервал в C#

Как увеличить/Уменьшить расстояние между датой символов.

D -> -> D/M -> M/Y -> Y -> Y - Y ->

должен выглядеть следующим образом:

0 8  0 8  2 0 1 6  
+0

Зачем вам это нужно? –

+0

@SteveWellens Я хочу напечатать на форме и убедиться, что она напечатана в полях. – Patrick

+2

Можете ли вы сказать, каково ваше фактическое требование? Кажется, это проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –

ответ

1

Если я правильно понимаю, это выглядит, как вы ищете выходной форматировщиком

string.Format можно использовать в этом случае:

var someDate = new System.DateTime(2016, 8, 8); 

string.Format("{0,10}:{1,20}:{2,30}", someDate.Month, someDate.Day, someDate.Year) 

Выход:

"   8:     8:       2016" 

Вы можете введите любое значение {0, XX} в зависимости от того, сколько отступов требуется для заданного параметра.

Кроме того выезд date and time formatters.

+0

Gotta попробовать это. – Patrick

+0

это работает, как я могу управлять этим дополнением через текстовое поле? – Patrick

+1

Возможно ... проверьте эту ссылку http://stackoverflow.com/questions/9542994/variable-string-format-length –

2

Something как это достаточно хорошо?

var padded = string.Join(" ", DateTime.Now.ToString("dd MM yyyy").ToCharArray()) 

Выход:

0 8 0 8 2 0 1 6

Вот еще один вариант:

public class CharWithPadding 
{ 
    public char Char; 
    public int Padding; 
} 

...

//Populate a list with the current date, and default padding 
var paddingDictionary = DateTime.Now.ToString("dd MM yyyy") 
    .ToCharArray() 
    .Select(c => new CharWithPadding { Char = c, Padding = 2 }) 
    .ToList(); 

//Add extra padding to specific point in the date-string 
paddingDictionary[2].Padding = 10; 

var output = string.Join("", paddingDictionary.Select(cwp => cwp.Char + new string(' ', cwp.Padding))); 
+4

Возможно, вы захотите использовать шрифт с фиксированным пространством, чтобы промежуток был согласован (например, Courier). Тем не менее, я собираюсь угадать, что будет легче сломать дату на 8 символов и напечатать каждый отдельно. –

+0

это хороший ответ dave bish, я пробовал это, и он работает, для этого я даю вам голосование. , но проблема в том, что у меня есть несколько форм, и их дата-боксы имеют разные размеры. иногда 08/08/20101 печатает правильно, но 6 либо слишком далеко от коробки, либо слишком близко, в этом случае я застрял в этой опции. если я могу индивидуально разместить каждого персонажа, это лучшая вещь. – Patrick

+0

@SteveWellens У меня первоначально была эта идея: либо я разбиваю их на каждый отдельно, либо использую ответ, предоставленный санджай-сутар, с интервалом, контролируемым цифровыми вверх или текстовыми полями. – Patrick

0

Что вы спрашиваете о либо называется kerning, или, скорее всего letter spacing. Однако, если вы знаете точное местоположение на форме вы печатаете на, вы, вероятно, гораздо лучше создавать и позиционирование отдельных элементов из кусочков DateTime объекта, а не пытаться настроить интервал:

DateTime FormDate = DateTime.Now; 
Box1.Text = FormDate.DayToString(); 
Box2.Text = FormDate.Month.ToString(); 

и т. Д.

Многие шрифты имеют разную ширину каждого символа, включая ''; иногда даже разные пробелы между комбинациями букв. Если шрифт (или форма) когда-либо изменяется или если этот код когда-либо используется повторно, жизнь будет намного проще, если ваше решение не зависит от шрифта.

+0

Я вижу, точнее, я хочу независимый интервал каждого персонажа. – Patrick

Смежные вопросы