C# RSS Syndication, Как форматировать текст программно

Я пытаюсь создать приложение для новостной ленты, и у меня возникают проблемы с форматированием результатов. Я уверен, что проблема заключается только в отсутствии опыта. У меня есть две основные проблемы. Первая - это item.summary. текст тянет кучу ссылок мимо резюме.

Другая проблема, которую я имею, состоит в том, чтобы выделить все названия и изменить их цвет. Я также использую текстовое поле Rich, которое, вероятно, не лучший способ представления данных.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ServiceModel.Syndication;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Xml.Linq;
using System.IO;
using System.Net;
using System.Xml;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Ltest1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string url = "  http://feeds.reuters.com/reuters/topNews";
            XmlReader reader = XmlReader.Create(url);
            SyndicationFeed feed = SyndicationFeed.Load(reader);
            reader.Close();
            foreach (SyndicationItem item in feed.Items)
            {
                Fodder_Box.SelectionStart = "Title".Length;
                Fodder_Box.SelectionColor = Color.Red;
                Fodder_Box.SelectionFont = new Font("Arial", 20, FontStyle.Bold);
                Fodder_Box.AppendText("Title: " + item.Title.Text + Environment.NewLine + Environment.NewLine);
                Fodder_Box.SelectionStart = "Summary".Length;
                Fodder_Box.SelectionColor = Color.Black;
                Fodder_Box.SelectionFont = new Font("Arial", 20, FontStyle.Regular);
                Fodder_Box.AppendText("Date: " + item.PublishDate.ToString("yyyy/MM/dd H:MM:ss") + Environment.NewLine + Environment.NewLine);
                Fodder_Box.AppendText("Summary: " + item.Summary.Text + Environment.NewLine);
                Fodder_Box.AppendText("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + Environment.NewLine + Environment.NewLine);
            }
        }
    }
}

1 ответ

Решение

Вместо RichTextBox вы можете использовать более удобный для HTML элемент управления, например, элемент управления WebBrowser. Затем вы можете создать строку HTML и отформатировать ее с помощью CSS. Допустим, вы добавили элемент управления WebBrowser с именем webBrowser к вашей форме. Вы могли бы тогда заменить свой текущий foreach цикл с чем-то вроде этого:

var text = new StringBuilder();

foreach (SyndicationItem item in feed.Items)
{
    text.AppendFormat("<p style='font-family:arial;color:red;font-size:20;font-weight:bold;'>Title: {0}</p>", item.Title.Text);
    text.AppendLine("</br>");
    text.AppendLine("</br>");

    text.AppendFormat("<p style='font-family:arial;font-size:20;'>Date: {0:yyyy/MM/dd H:MM:ss}</p>", item.PublishDate);
    text.AppendLine("</br>");
    text.AppendLine("</br>");

    text.AppendFormat("<p style='font-family:arial;font-size:20;'>Summary: {0}</p>", item.Summary.Text);
    text.AppendLine("</br>");
    text.AppendLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    text.AppendLine("</br>");
    text.AppendLine("</br>");
}

webBrowser.DocumentText = text.ToString();

См. Также: Как добавить возможности веб-браузера в приложение Windows Forms.

Другие вопросы по тегам