富文本框中的十进制选项卡

时间:2011-09-07 18:55:35

标签: c# richtextbox rtf richtext

我有一些内容将显示在C#富文本框中。我希望其中一列显示小数点对齐:

//  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

我在\ tx5000(标签5000从左边缘翻转)之前移动了\ tqdede(十进制标签)命令,但没有成功。还尝试使用\ tqr(tab align right)命令,但没有成功。

建议表示赞赏

2 个答案:

答案 0 :(得分:1)

假设WinForms,RichTextBox不支持对齐的标签。你可以打开写字板,看看它没有这些选项。

您可能想要尝试的一个技巧是使用具有单元格对齐的表格。不幸的是,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代码。

尝试去做这样的事情还有很长的路要走,但可能会帮助你。

答案 1 :(得分:0)

哇,我不确定你的真正意图是修改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支持表,对吗?),然后用右边的0填充你的数字,最后像Excel一样右对齐列。