富文本框中 JSON 数组中的粗体特定元素
Bold Specific Elements from JSON Array in Rich Textbox
我目前遇到的问题是从网络服务器检索的一段文本格式为 JSON 数组。
我想要完成的是以用户可以轻松阅读的方式格式化文本。我想要实现的示例输出是:
这是标题
根据所选主题,这是一段信息量不大的段落
这是副标题
这是另一段
字符串的外观(修改前):
{"Title":"This is a Title", "Content_One": "This is alittle
informative paragraph based on the subject selected", "Title_Two":
"This is another paragraph"}
我当前的应用程序使用的是 Winforms,我正在尝试将其添加到富文本框(希望能处理正确的格式)。作为一个小远景,我尝试返回 HTML 标签(非常远景)为此不提供对文本的更改。
我也尝试过单独遍历数组,并尝试以粗体方式从 JSON 数组中加粗某些元素。我试过的 None 提供了预期的输出。
尝试一:
TTKNormalContent.Text = new Font(ReturnArr.Title, FontStyle.Bold).ToString();
哪个returns:
An unhandled exception of type
'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in
System.Core.dll
尝试一:
TTKNormalContent.Text = ReturnArr.Title;
TTKNormalContent.SelectionFont = new Font(this.Font, FontStyle.Bold);
不加粗文本
尝试二:
我可以通过以下方式暂时将文本加粗:
TTKNormalContent.Font = new Font(TTKNormalContent.Font, FontStyle.Bold);
TTKNormalContent.Text = ReturnArr.Title;
但添加:
TTKNormalContent.Font = new Font(TTKNormalContent.Font, FontStyle.Regular);
TTKNormalContent.Text += ReturnArr.ContentOne;
这将消除大胆
您需要使用 AppendText
。当您使用 Text+= "something"
时,您将替换格式。
您可以使用这个例子:
var json = "{\"Title\":\"This is a Title\", \"Content_One\": \"This is alittle informative paragraph based on the subject selected\", \"Title_Two\": \"This is another paragraph\"}";
var start = 0;
Dictionary<string, string> values = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(json);
values.Cast<KeyValuePair<string, string>>()
.ToList()
.ForEach(item =>
{
this.richTextBox1.AppendText(item.Key);
this.richTextBox1.AppendText( ":" );
start += item.Key.Length + 1;
this.richTextBox1.AppendText(item.Value);
this.richTextBox1.Select(start, item.Value.Length);
this.richTextBox1.SelectionFont = new Font(this.richTextBox1.Font, FontStyle.Bold);
this.richTextBox1.AppendText("\n");
start += item.Value.Length + 1;
});
截图:
我目前遇到的问题是从网络服务器检索的一段文本格式为 JSON 数组。
我想要完成的是以用户可以轻松阅读的方式格式化文本。我想要实现的示例输出是:
这是标题
根据所选主题,这是一段信息量不大的段落
这是副标题
这是另一段
字符串的外观(修改前):
{"Title":"This is a Title", "Content_One": "This is alittle informative paragraph based on the subject selected", "Title_Two": "This is another paragraph"}
我当前的应用程序使用的是 Winforms,我正在尝试将其添加到富文本框(希望能处理正确的格式)。作为一个小远景,我尝试返回 HTML 标签(非常远景)为此不提供对文本的更改。
我也尝试过单独遍历数组,并尝试以粗体方式从 JSON 数组中加粗某些元素。我试过的 None 提供了预期的输出。
尝试一:
TTKNormalContent.Text = new Font(ReturnArr.Title, FontStyle.Bold).ToString();
哪个returns:
An unhandled exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll
尝试一:
TTKNormalContent.Text = ReturnArr.Title;
TTKNormalContent.SelectionFont = new Font(this.Font, FontStyle.Bold);
不加粗文本
尝试二:
我可以通过以下方式暂时将文本加粗:
TTKNormalContent.Font = new Font(TTKNormalContent.Font, FontStyle.Bold);
TTKNormalContent.Text = ReturnArr.Title;
但添加:
TTKNormalContent.Font = new Font(TTKNormalContent.Font, FontStyle.Regular);
TTKNormalContent.Text += ReturnArr.ContentOne;
这将消除大胆
您需要使用 AppendText
。当您使用 Text+= "something"
时,您将替换格式。
您可以使用这个例子:
var json = "{\"Title\":\"This is a Title\", \"Content_One\": \"This is alittle informative paragraph based on the subject selected\", \"Title_Two\": \"This is another paragraph\"}";
var start = 0;
Dictionary<string, string> values = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(json);
values.Cast<KeyValuePair<string, string>>()
.ToList()
.ForEach(item =>
{
this.richTextBox1.AppendText(item.Key);
this.richTextBox1.AppendText( ":" );
start += item.Key.Length + 1;
this.richTextBox1.AppendText(item.Value);
this.richTextBox1.Select(start, item.Value.Length);
this.richTextBox1.SelectionFont = new Font(this.richTextBox1.Font, FontStyle.Bold);
this.richTextBox1.AppendText("\n");
start += item.Value.Length + 1;
});
截图: