Rss阅读器问题,接下来是下拉列表

时间:2015-08-09 07:19:15

标签: c# asp.net xml rss visual-studio-2015

好的,所以我对C#很陌生,并检索了一段代码,将rss软件更新信息从站点显示到我的Windows程序。我注意到其中一个节点有我需要显示的描述,因此我稍微更改了代码以尝试收集此信息;然而,当我这样做时,我打破了下拉框功能,试图自己解决它,但无法弄清楚出了什么问题。

那么在form_load事件中会发生什么,它应该将rss页面加载到我的显示框中,然后如果我从下拉框中选择一个不同的补丁说明,它应该根据我选择的内容进行更改。现在它只更改底部文本链接,而不是显示信息的主窗口。

这是代码本身。我评论了他们的旧线并添加了我的显示。

String[,] rssData = null;

void Form1_Load(object sender, EventArgs e)
{
    TitlesBox.Items.Clear();
    rssData = getRssData(ChannelTextBox.Text);
    for (int i = 0; i < rssData.GetLength(0); i++)
    {
        if (rssData[i, 0] != null)
        {
            TitlesBox.Items.Add(rssData[i, 0]);
        }
        TitlesBox.SelectedIndex = 0;
    }
}

private String[,] getRssData(String channel)
{
    WebRequest myRequest = WebRequest.Create(channel);
    WebResponse myResponse = myRequest.GetResponse();

    Stream rssStream = myResponse.GetResponseStream();
    XmlDocument rssDoc = new XmlDocument();

    rssDoc.Load(rssStream);
    XmlNodeList rssItems = rssDoc.SelectNodes("//rss/channel/item");

    XmlNamespaceManager nMger = new XmlNamespaceManager(rssDoc.NameTable);
    nMger.AddNamespace("content", rssDoc.DocumentElement.GetNamespaceOfPrefix("content"));

    String[,] tempRssData = new String[100, 3];
    for (int i = 0; i < rssItems.Count; i++)
    {
        XmlNode rssNode;

        rssNode = rssItems.Item(i).SelectSingleNode("title");
        if (rssNode != null)
        {
            tempRssData[i, 0] = rssNode.InnerText;
        }
        else
        {
            tempRssData[i, 0] = "";
        }

        rssNode = rssItems.Item(i).SelectSingleNode("content:encoded", nMger);
        //rssNode = rssItems.Item(i).SelectSingleNode("description");
        if (rssNode != null)
        {
            tempRssData[i, 1] = rssNode.InnerText;
        }
        else
        {
            tempRssData[i, 1] = "";
        }

        rssNode = rssItems.Item(i).SelectSingleNode("link");
        if (rssNode != null)
        {
            tempRssData[i, 2] = rssNode.InnerText;
        }
        else
        {
            tempRssData[i, 2] = "";
        }
    }
    return tempRssData;
}

private void TitlesBox_SelectedIndexChanged(object sender, EventArgs e)
{
    if (rssData[TitlesBox.SelectedIndex, 1] != null)
        OutputBox.DocumentText = rssData[TitlesBox.SelectedIndex, 1];
    if (rssData[TitlesBox.SelectedIndex, 2] != null)
        linkLabel.Text = "GoTo: " + rssData[TitlesBox.SelectedIndex, 0];
}

private void linkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    if (rssData[TitlesBox.SelectedIndex, 2] != null)
        Process.Start(rssData[TitlesBox.SelectedIndex, 2]);
}

2 个答案:

答案 0 :(得分:0)

解决了我的问题。问题出在这里。

private void TitlesBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (rssData[TitlesBox.SelectedIndex, 1] != null)
            OutputBox.DocumentText = rssData[TitlesBox.SelectedIndex, 1];
        if (rssData[TitlesBox.SelectedIndex, 2] != null)
            linkLabel.Text = "GoTo: " + rssData[TitlesBox.SelectedIndex, 0];
    }

OutputBox是一个RichTextBox,它不接受更改,因此我将其更改为WebBrowser,现在它正在运行。是在设计本身。

无论如何,谢谢你的帮助。

答案 1 :(得分:0)

当您更改框中的数据时,所选索引计数将设置为-1。所以我会测试&gt; = 0.我会使用发送者而不是假设对象是TitlesBox。请参阅下面的代码。

&#13;
&#13;
        private void TitlesBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox box = sender as ComboBox;
            if (box.SelectedIndex >= 0)
            {
                OutputBox.DocumentText = ((List<string>)(box.Items[box.SelectedIndex]))[1];
                linkLabel.Text = "GoTo: " + ((List<string>)(box.Items[box.SelectedIndex]))[0];
            }
 
        }
​
&#13;
&#13;
&#13;