2013-09-06 5 views
1

У меня есть следующий код для добавления числительные, такие как й, й, е и так далее ..Показать ординалы как надстрочный

Private ordinals As String() = New String() {"", "st", "nd", "rd", "th", "th", _ 
"th", "th", "th", "th", "th", "th", _ 
"th", "th", "th", "th", "th", "th", _ 
"th", "th", "th", "st", "nd", "rd", _ 
"th", "th", "th", "th", "th", "th", _ 
"th", "st"} 

Для получения даты я пишу это следующим образом:

Dim D As DateTime = Me.PresentDate.Value.ToString("MM-dd-yyyy") 
Dim todate As String = D.Day.ToString() + ordinals(D.Day) 

результат:

пятые

Но я хотел бы, чтобы получить результат, как показано ниже

enter image description here

ответ

1

Почему бы не просто использовать символы верхнего строчка в первую очередь?

Dim ordinals = {"", "ˢᵗ", "ⁿᵈ", "ʳᵈ", "ᵗʰ", "ᵗʰ", _ 
       "ᵗʰ", "ᵗʰ", "ᵗʰ", "ᵗʰ", "ᵗʰ", "ᵗʰ", _ 
       "ᵗʰ", "ᵗʰ", "ᵗʰ", "ᵗʰ", "ᵗʰ", "ᵗʰ", _ 
       "ᵗʰ", "ᵗʰ", "ᵗʰ", "ˢᵗ", "ⁿᵈ", "ⁿᵈ", _ 
       "ᵗʰ", "ᵗʰ", "ᵗʰ", "ᵗʰ", "ᵗʰ", "ᵗʰ", _ 
       "ᵗʰ", "ˢᵗ"} 

Dim D = DateTime.Now 
Dim todate = D.Day.ToString() + ordinals(D.Day) ' todate = 6ᵗʰ 

или создать простой словарь подстановок:

Dim ordinals = {"", "st", "nd", "rd", "th", "th", _ 
       "th", "th", "th", "th", "th", "th", _ 
       "th", "th", "th", "th", "th", "th", _ 
       "th", "th", "th", "st", "nd", "rd", _ 
       "th", "th", "th", "th", "th", "th", _ 
       "th", "st"} 

Dim supers = "abcdefghijklmnopqrstuvwxyz".Zip("ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖXʳˢᵗᵘᵛʷˣʸᶻ", AddressOf Tuple.Create) _ 
             .ToDictionary(Function(t) t.Item1, Function(t) t.Item2) 
Dim D = Date.Now 
Dim todate = D.Day.ToString() + String.Join("", ordinals(D.Day).Select(Function(c) supers(c))) 
+0

@ Dominic-Спасибо за простую логику :) – coder

1

Если вы пытаетесь отобразить это в богатом текстовом поле, то вы можете сделать следующее. Это предполагает, что у вас есть богатое текстовое поле в форме и обрезало вашу строку ординалов. В мероприятии по загрузке формы добавьте следующее:

Dim D As DateTime = CDate(Now.ToString("MM-dd-yyyy")) 
    Dim todate As String = D.Day.ToString() + ordinals(D.Day) 
     With RichTextBox1 
      .SelectionFont = New Font("Lucinda Console", 12) 
      .SelectedText = D.Day.ToString() 
      .SelectionCharOffset = 5 
      .SelectedText = ordinals(D.Day) 
     End With 

Здесь вы должны быть в состоянии играть с форматированием. Однако в качестве предостережения это, похоже, работает только с богатым текстовым полем или контролем, полученным от одного