RichTextBox格式不正确

时间:2015-03-09 01:28:52

标签: c# json richtextbox

因此,我从JSON文件中抓取内容并将每个项目附加到富文本框控件。但是,当我追加并修改外观时......它随机看起来像......

当然中间的那个格式正确,它是外面的那些不是。

它也是完全随机的。有些人会工作,有些人会胜利。那是什么让我失望的。

这是代码......

private void getNews()
    {
        WebClient newsClient = new WebClient();
        Stream newsStream = newsClient.OpenRead("http://example.com/file.json");
        StreamReader newsReader = new StreamReader(newsStream);
        String newsReaderContent = newsReader.ReadToEnd();
        Console.WriteLine(newsReaderContent);
        JObject newsResults = JObject.Parse(newsReaderContent);
        foreach (var newNews in newsResults["news"])
        {
            newsFeedControl.Text += newNews["title"] +
                                    Environment.NewLine +
                                    newNews["date"] +
                                    Environment.NewLine +
                                    newNews["content"] +
                                    Environment.NewLine +
                                    Environment.NewLine;
            setNewsContent(newNews);
        }
    }

    private void setNewsContent(JToken news)
    {
        List<int> indexDate = new List<int>();
        List<int> indexContent = new List<int>();
        List<int> indexTitle = new List<int>();
        string postTitle = news["title"].ToString();
        string postDate = news["date"].ToString();
        string postContent = news["content"].ToString();
        indexTitle = indexFeed(postTitle);
        indexDate = indexFeed(postDate);
        indexContent = indexFeed(postContent);
        foreach (int item in indexTitle)
        {
            newsFeedControl.Select(item, postTitle.Length);
            newsFeedControl.SelectionColor = Color.White;
            newsFeedControl.SelectionFont = new System.Drawing.Font("Segoe UI", 11, FontStyle.Underline);
        }
        foreach (int item in indexDate)
        {
            newsFeedControl.Select(item, postDate.Length);
            newsFeedControl.SelectionColor = Color.White;
            newsFeedControl.SelectionFont = new System.Drawing.Font("Segoe UI", 7, FontStyle.Italic);
        }
        foreach (int item in indexContent)
        {
            newsFeedControl.Select(item, postContent.Length);
            newsFeedControl.SelectionColor = Color.White;
            newsFeedControl.SelectionFont = new System.Drawing.Font("Segoe UI", 10);
        }
    }

    private List<int> indexFeed(String word)
    {
        List<int> indexes = new List<int>();
        int i = 0;
        int ind = 0;
        while (i < newsFeedControl.Text.Length)
        {
            ind = newsFeedControl.Find(word, i, RichTextBoxFinds.WholeWord);
            if (ind != -1)
            {
                indexes.Add(ind);
                i = i + ind + 1;
            }
            else
                return indexes;
        }
        return indexes;
    }

我不确定导致这种混乱的原因是什么,或者我能做些什么来帮助它。 任何指向正确方向的帮助将不胜感激。谢谢你。

1 个答案:

答案 0 :(得分:0)

这是问题所在:

newsFeedControl.Text += newNews["title"]...

从不直接设置Text或所有以前的格式都搞砸了。请始终使用AppendText

newsFeedControl.AppendText(newNews["title"] + ...);

对于Text属性的任何其他操作也是如此。始终使用SelectedText代替Cut()Copy()Paste() ..!

看似随机的后果来自于RTB尝试忽略损坏的标签这一事实,因此有些事情看起来比其他事情更好。看看Rtf属性,看看我的意思..