为了让你们更容易理解我在问什么,我会写一个完整的过程:
1)应用程序启动
2)按下Button1:
- 使用新闻文章标题填充TreeView1
- 将第一个节点添加到变量1
3)按下Button1:
- 使用新文章标题填充TreeView1
- 将第一个节点添加到变量2
- 比较变量1和2,如果它们不同则显示消息框。如果他们是相同的什么都不做。
4)按下Button1:
- 使用新文章标题填充TreeView1
- 将第一个节点添加到变量3
- 比较变量2和3,如果它们不同则显示消息框。如果他们是相同的什么都不做。
依此类推......
基本上每次按下button1时,第一个节点都存储到新变量中并与之前的变量进行比较。
所以我的问题是:每次按下button1时,如何将'First Node'存储到另一个变量?
先谢谢你们!
答案 0 :(得分:0)
清除现有节点之前。将第一个节点推入列表,如下所示。
private List<TreeNode> previousNodes;
public Form1()
{
InitializeComponent();
previousNodes = new List<TreeNode>();
}
private void button1_Click(object sender, EventArgs e)
{
previousNodes.Add(treeView1.Nodes[0]);
//Clear out nodes, add new ones
//Compare by treeView1.Nodes[0].Text == previousNodes.Last().Text
}
答案 1 :(得分:0)
我建议使用TreeNode.Tag属性,因为它就是它的用途。在使用节点填充TreeView时,请将每个节点的Tag属性设置为唯一标识与其关联的新闻文章的内容。我通常将它设置为Node试图表示的对象,在本例中是一篇新闻文章。
private void LoadNewsArticles()
{
List<MyNewsArticle> newsArticles = GetNewsArticles();
foreach(MyNewsArticle a in newsArticles)
{
TreeNode node = new TreeNode(a.Title)
node.Tag = a;
treeView1.Nodes.Add(node);
}
}
然后,当您需要比较节点值时,您可以查看标签。
private MyNewsArticle _currentTopArticle;
private void button1_Click(object sender EventArgs e)
{
LoadNewsArticles();
TreeNode topNode = treeView1.Nodes[0];
MyNewsArticle topArticle = topNode.Tag as MyNewsArticle;
if(topArticle.Equals(_currentTopArticle))
{
// Do something
}
_currentTopArticle = topArticle;
}
请注意,此示例仅跟踪前一篇文章,因为您的问题并不表示需要更多。如果您确实需要保留热门文章的完整历史记录,那么您需要有一个文章列表,并且每次加载时都会将最新的热门故事推送到其中。