好的,所以我对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]);
}
答案 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。请参阅下面的代码。
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;