c# - Winforms RichTextBox 中的两列

标签 c# winforms printing richtextbox wysiwyg

在 C# 中,我需要至少能够在单个 RichTextBox 中给人以 2 列的印象。出于我的目的,它可能看起来像这样:

1+1             2
70*8+5          565
1000000-300000  700000
76-10           66

对于左栏中的每个“问题”,都会有相应的答案。

“显而易见”的解决方案是使用这样的标签:

SelectionTabs = new int[] { 0, 500 };

(或者简单地将原始 Rtf 中的\deftab 设置为大约 3000)。

一切都很好,直到左列输入 ITSELF 包含制表符。在这种情况下,一切都会变成梨形。我不介意插入多个制表位,但是当输入包含有时会“超过”特定制表位的文本时,这将无法正常工作。检测到这一点并对其进行适当的解释不仅很难做到,而且由于打印时出现的“几乎但不完全是所见即所得”的结果以及标签受到的影响,也充满了危险。

另一个想法是有一个全局制表符大小(在 Rtf 中使用\deftab),然后计算应该在左列中的每一行之后自动插入多少个制表符(基于左列中最长的行)。这种方法的问题在于,虽然屏幕上的内容看起来不错,但在打印时,右栏会出现一些故障。所谓“故障”,我的意思是每 20 行中大约有 1 行会有“丢失”或“额外”选项卡。这是因为打印并不完全是所见即所得,即使在我遵循本教程之后也是如此:http://msdn.microsoft.com/en-us/library/ms996492.aspx

可以这么说,与 RichTextBox 在屏幕上的 View 相比,即使是打印中的几个像素/点偏移也会对选项卡的定位产生巨大影响。

我也尝试过在 Rtf 中的一行中途更改制表位位置,但不幸的是,尽管它在 Rtf 中的位置如此,但从行的开头应用了这样的控制代码。

我也一直在梳理来自 http://www.biblioscape.com/rtf15_spec.htm 的 Rtf 规范,而且我似乎无能为力。 C# 的 RichTextBoxes 似乎不太适合处理表格(这是另一种可能的解决方案)。还有 Rtf 列,但即使支持它们,它们也可能无济于事,因为第一列一旦被填满就会切换到同一张纸上的第二列(而不是保持第一列和去纸的第二页,这是我想要的)。

我已经花了很多时间解决这个问题,但我完全不知所措。如此简单的事情实际上很难做好。除非我遗漏了一些明显的东西......

---------------- 编辑 1: 这需要使用非固定宽度的字体,所以我不能只用空格填充。

最佳答案

诀窍很简单:我最近做了同样的事情(好吧,差不多)——我必须创建一个文本文件 这给人的印象是它有多个列(在文本文件中?sheesh)

有什么技巧?填充!

假设您拥有之前声明的值

1+1             2
70*8+5          565
1000000-300000  700000
76-10           66

现在,您需要做的就是设置左列的宽度(以字符为单位),以及宽度右栏。假设两个宽度都是 30 个字符。

您现在所要做的就是按照以下伪代码构造一行:

BEGIN-BUILD-TEXT
     FOR EACH PAIR X, Y
         STRING S1 = X.PADRIGHT(30);
         STRING S2 = Y.PADRIGHT(30);
         WRITE_LINE_TO_TEXTBOX(S1 + S2);

这样,列将左对齐并具有固定宽度。

对我有用!

编辑:您的 RichTextBox 应该使用固定宽度的字体(它对所有字符具有相同的宽度)。

关于c# - Winforms RichTextBox 中的两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8804958/

相关文章:

c# - 从 azure 创建到数据库的连接

c# - APP 洞察模式 机器学习

C# Winforms 线程 : Closed Form Gets Invoked

c++ - Qt QPainter 以毫米而不是英寸为单位

java - 热敏收据打印机自动剪切问题

c# - Asp.net Mvc 区域路由问题

C#:合并相邻范围

c# - 停靠的多行文本框被 StatusStrip 覆盖

winforms - 如何覆盖 WinForms TextBox 的首选大小?

javascript - 在 birt 中缩放到 "Fit All Columns on One Page"