具有常量和动态文本的富文本框的字符串格式

时间:2018-03-15 23:31:09

标签: c# richtextbox format-string

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

这样的事情: ID: 8494903282

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

ID: 8494903282

名称:某些名称

日期: 3/15/2018

目前我有一个富文本框输出到,我试图使用一些字符串格式来做我想要的但这不能正常工作。基本上我需要一个字符串值,我可以存储在字典中,所以当一个项目被选中时,我可以将文本框的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是表格的字典< string,string>它包含特定项的格式字符串。

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

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

2 个答案:

答案 0 :(得分: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;

enter image description here

感谢您指出我正确的方向!

答案 1 :(得分:0)

我认为您的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);