在 C# 中,我需要能够在单个 RichTextBox 中至少给出 2 列的印象。出于我的目的,它可能看起来像这样:
1+1 2
70*8+5 565
1000000-300000 700000
76-10 66
对于左栏中的每个“问题”,都会有相应的答案。
“明显”的解决方案是使用这样的选项卡:
SelectionTabs = new int[] { 0, 500 };
(或者简单地将原始 Rtf 中的 \deftab 设置为大约 3000)。
这一切都很好,直到左列输入本身包含选项卡。当这种情况发生时,一切都会变得梨形。我不介意插入多个制表位,但是当输入包含有时“超过”特定制表位的文本时,这将无法正常工作。检测到这一点并正确解释它不仅很难做到,而且由于打印时出现的“几乎但不完全是所见即所得”的结果以及标签受到的影响而充满危险。
另一个想法是有一个全局制表符大小(在 Rtf 中使用 \deftab),然后计算在左列中的每行之后应自动插入多少个制表符(基于左列中最长的行)。这种方法的问题在于,虽然屏幕上看起来很棒,但在打印时,右栏却出现了一些故障。我所说的“故障”是指大约每 20 行中就有 1 行会有“丢失”或“额外”选项卡。这是因为即使在我遵循本教程之后,打印也不完全是所见即所得:http://msdn.microsoft.com/en-us/library/ms996492.aspx http://msdn.microsoft.com/en-us/library/ms996492.aspx
可以说,与 RichTextBox 在屏幕上的视图相比,即使打印时偏离几个像素/点也会对选项卡的位置产生巨大影响。
我还尝试过更改 Rtf 中一行的中间制表位位置,但不幸的是,这样的控制代码是从行的开头应用的,尽管它在 Rtf 中的位置。
我也一直在梳理 Rtf 规范http://www.biblioscape.com/rtf15_spec.htm http://www.biblioscape.com/rtf15_spec.htm,而我似乎对此无能为力。 C# 的 RichTextBox 似乎不太适合表格(这是另一个潜在的解决方案)。还有 Rtf 列,但即使支持它们,它们也可能无济于事,因为一旦填充,第一列将切换到同一张纸上的第二列(而不是保留第一列和转到纸张的第二页,这就是我想要的)。
我已经为这个问题花了很多时间,但我完全不知所措。如此简单的事情实际上要做好却非常棘手。除非我错过了一些明显的东西......
----------------编辑1:
这需要使用非固定宽度的字体,所以我不能只用空格填充。