Вкладка десятичной дроби в поле расширенного текста - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть контент, который будет отображаться в текстовом поле C # rich.Я хотел бы, чтобы один из столбцов отображался с выровненными десятичными точками:

//  Title                      Price
//  Item1                     1234.56
//  Item2                       78.90
//  Item3                        1.2

Ниже приведен код, который использовался при (неудачной) попытке построить строку в памяти перед ее передачей в элемент управления RichTextBox.

message = "";
message += @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033" +
           @"{\*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang9\f0\fs22 TEST RICH TEXT BOX \par";
message += @"\pard\sa200\sl276\slmult1\tx4000\ul\b Title\ulnone\b0\tab\ul\b Price\ulnone\b0\line\pard\sa200\sl276\slmult1\tx5000\tqdec\par ";
message += String.Format(@"{0}\tab {1} \line ", "Item1", 1234.56);
message += String.Format(@"{0}\tab {1} \line ", "Item2", 78.90);
message += String.Format(@"{0}\tab {1} \line ", "Item3", 1.2);
message += @"\par}";

с использованием этого результат выглядит так:

//  Title                      Price
//  Item1                     1234.56
//  Item2                     78.90
//  Item3                     1.2

Я переместил команду \ tqdec (десятичная табуляция) перед \ tx5000 (вкладка 5000 поворачивается от левого края) без успеха,Также попытка использования команды \ tqr (tab align right) безуспешна.

Предложения приветствуются

Ответы [ 2 ]

1 голос
/ 07 сентября 2011

Предполагая WinForms, RichTextBox не поддерживает выровненные вкладки.Вы можете открыть WordPad и увидеть, что у него тоже нет этих опций.

Один прием, который вы можете попробовать, - это использовать таблицы с выравниванием ячеек.К сожалению, элемент управления RichTextBox также не поддерживает таблицы (по крайней мере, в .net 3.5, я не знаю о .net 4), но вы можете заставить его сделать что-то вроде этого:

public class rtbEx : RichTextBox
{
  [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
  static extern IntPtr LoadLibrary(string lpFileName);

  protected override CreateParams CreateParams
  {
    get
    {
      var prams = base.CreateParams;
      if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
        prams.ClassName = "RICHEDIT50W";

      return prams;
    }
  }
}

Послечто я обычно использую Microsoft Word для создания своих таблиц и копирую / вставляю их в свой richtextbox, а затем соответствующим образом настраиваю код rtf. может помочь вам.

0 голосов
/ 07 сентября 2011

Ух ты, я не уверен, действительно ли ты собираешься изменить исходный текст RTF или ты делаешь это только для выравнивания текста. Далее я предполагаю, что вы работаете с обычной строкой, в которой вкладки экранируются как \ t, а новые строки - как \ r \ n. (Вам не нужно редактировать исходное свойство RTF для ввода текста при нормальных обстоятельствах ... Я полагаю, у вас есть веская причина для этого ...)

Этот код работает? Вы не против конечных 0? Кстати, вкладки не помогут вам выровнять текст. Вы должны использовать опции формата строки, чтобы вставить пробелы там, где они вам нужны.

        message += String.Format("{0}\t {1,10:#####0.00} \r\n", "Item1", 1234.56);
        message += String.Format("{0}\t {1,10:#####0.00} \r\n", "Item2", 78.90);
        message += String.Format("{0}\t {1,10:#####0.00} \r\n", "Item3", 1.2);

Выход:

Item1     1234.56 
Item2       78.90 
Item3        1.20 

Другой подход состоит в том, чтобы вставить таблицу (я полагаю, что RTF поддерживает таблицы, верно?), Затем дополнить числа нулями справа и, наконец, выровнять столбец вправо, как в Excel.

...