【问题标题】:String formatting for rich text box with constant and dynamic text具有常量和动态文本的富文本框的字符串格式
【发布时间】:2018-03-15 23:31:09
【问题描述】:

目前我正在尝试创建一个字典,它将所选项目从列表视图映射到富文本框中的相应字符串输出。我想将字符串中的特定文本加粗,该文本将始终相同(常量),并将动态文本添加到会更改的字符串中。

类似这样的: ID: 8494903282

其中 ID 是我需要加粗的常量文本,而数字将是一个变化的动态 ID。我将需要多行具有这种格式的不同数据,这些数据将发生变化:

ID: 8494903282

姓名:一些名字

日期: 2018 年 3 月 15 日

目前我有一个富文本框要输出到,我正在尝试使用一些字符串格式来做我想做的事,但这不能正常工作。本质上,我需要一个可以存储在字典中的字符串值,因此当一个项目被选中时,我可以将文本框的 rtf 属性设置为该字典项目的值。

下面是我当前的格式字符串,我正在尝试将 rtf 属性设置为:

string s1 = string.Format(@"{{\rtf1\ansi \b Commit ID: \b0 {0}\line}}", entry.ID);
string s2 = string.Format(@"{{\b Author: \b0 {0}\line}}", entry.Author);
string s3 = string.Format(@"{{\b Date: \b0 {0}\line}}", entry.Date.ToString("d"));
string s4 = Environment.NewLine + Environment.NewLine + entry.Message;
contents = (s1 + s2 + s3 + s4);

然后设置我的富文本框的rtf属性:

LogContentsTB.Rtf = Logs[LogNamesLV.SelectedItems[0].Name];

其中 logs 是 形式的字典,其中包含特定项目的格式字符串。

但是,我得到以下输出而不是我的预期输出:

这是第一项的正确输出形式,但没有其他内容出现。如果还有其他方法可以做到这一点,我愿意接受建议。

【问题讨论】:

  • 您确定将contents 正确放入Logs 吗?
  • @ChetanRanpariya 是的,在我有一个常规文本框之前,我会输出该确切的字符串减去格式并尝试将其加粗。数据很好。

标签: c# richtextbox format-string


【解决方案1】:

在对 rtf 语法做了一些简单的阅读之后,我注意到我试图用花括号来关闭每个字符串。花括号用于 RTF 组。出于某种原因,Windows 窗体中的富文本框不能很好地适应它。

要注意的另一件事是 string.format 方法可能是导致此类格式问题的主要原因。在我的回答中,我不使用它,而只是将字符串直接添加到 rtf 格式的字符串中,即

如果您查看 NetMage 的响应,您会注意到他只在第一个字符串 s1 上放置了一个左大括号。这是对整个字符串进行分组。但是我们需要在最后一个字符串 s4 上添加一个右大括号来完成分组。下面是适用于我的应用程序的最终代码和屏幕截图。

string s1 = @"{\rtf1\ansi\b ID: \b0 " + entry.ID + @" \line\line";
string s2 = @"\b Author: \b0 " + entry.Author + @" \line\line";
string s3 = @"\b Date: \b0 " + entry.Date.ToString("d") + @" \line\line ";
string s4 = entry.Message + @"}";
contents = s1 + s2 + s3 + s4;

感谢您为我指明正确的方向!

【讨论】:

    【解决方案2】:

    我认为您的 RTF 格式有误。你可以试试:

    string s1 = string.Format(@"{{\rtf1\ansi\r\b Commit ID:\b0 {0}\line\r", entry.ID);
    string s2 = string.Format(@"\b Author: \b0 {0}\line\r", entry.Author);
    string s3 = string.Format(@"\b Date: \b0 {0}\line\r", entry.Date.ToString("d"));
    string s4 = Environment.NewLine + Environment.NewLine + entry.Message + "}}";
    contents = (s1 + s2 + s3 + s4);
    

    【讨论】:

    • NetMage,在进行这些更改时出现“输入字符串格式不正确”的异常。有什么想法吗?
    • 需要转义大括号,以便正确识别格式占位符。
    • 这听起来很合理。完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多