目前我正在尝试创建一个字典,该字典将列表视图中的选定项映射到富文本框中的相应字符串输出。我想在字符串中加粗特定的文本,它总是相同的(常量),并且还将动态文本添加到将要更改的字符串中。
这样的事情: 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>它包含特定项的格式字符串。
这是第一个项目的正确输出形式,但没有其他内容出现。如果还有其他方法可以做到这一点,我愿意接受建议。
答案 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;
感谢您指出我正确的方向!
答案 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);