我有一些内容将显示在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)命令,但没有成功。
建议表示赞赏
答案 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)
此代码有效吗?你介意尾随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一样右对齐列。