C# 富文本框中的十进制选项卡
我有一些内容将显示在C#富文本框中。我希望其中一列显示的小数点对齐:C# 富文本框中的十进制选项卡,c#,richtextbox,rtf,richtext,C#,Richtextbox,Rtf,Richtext,我有一些内容将显示在C#富文本框中。我希望其中一列显示的小数点对齐: // Title Price // Item1 1234.56 // Item2 78.90 // Item3 1.2 下面是在将字符串传递给RichTextBox控件之前(失败)尝试在内存中生成字符串时使用的代码 message = ""; me
// 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)命令,但未成功
感谢您的建议哇,我不确定您的真正意图是修改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那样右对齐列。假设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;
}
}
}
之后,我通常使用MicrosoftWord制作表格,并将其复制/粘贴到richtextbox中,然后相应地调整rtf代码
要想做到这一点还有很长的路要走,但这可能会对您有所帮助。我的建议是使用Courier New之类的字体,这种字体的间距是恒定的。不能解决所有问题,只能在测试时“最小化”噪声。RTF是错误的。Word可以生成RTF,并在写字板中正确对齐。当我尝试时,反向工程RTF是一个pita。正如您所猜测的,我的应用程序中的代码比我发布的简化示例要复杂得多。我使用RTF,以便一些编程定义的短语可以以粗体或下划线输出。尝试使用制表符对齐列的原因是使用比例字体。您对WinForms的假设是正确的。感谢您的努力,以及RichText不支持对齐选项卡(+1)的事实。但是,我当前应用程序的用户可能不喜欢对齐的小数位数,因此无法在此应用程序中实现此解决方案。幸运的是,对于确实需要它的应用程序,答案将是StackOverflow。