2

为了让你们更容易理解我在问什么,我将编写一个完整的过程:

1) 应用程序启动

2) Button1 被按下:

- 使用新闻文章标题填充 TreeView1

- 将第一个节点添加到变量 1

3) Button1 被按下:

- 使用新文章标题填充 TreeView1

- 将第一个节点添加到变量 2

- 比较变量 1 和 2,如果它们不同,则显示一个消息框。如果它们相同,则什么也不做。

4) Button1 被按下:

- 使用新文章标题填充 TreeView1

- 将第一个节点添加到变量 3

- 比较变量 2 和 3,如果它们不同,则显示一个消息框。如果它们相同,则什么也不做。

等等等等....

基本上每次按下 button1 时,第一个节点都会存储到新变量中并与之前的变量进行比较。

所以我的问题是:每次按下 button1 时,如何将“第一个节点”存储到不同的变量中?

提前谢谢各位!

4

2 回答 2

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
}
于 2013-09-04T22:05:30.993 回答
0

我建议使用 TreeNode.Tag 属性,因为这就是它的用途。当您使用节点填充 TreeView 时,请将每个节点的 Tag 属性设置为唯一标识与其关联的新闻文章的内容。我通常将它设置为节点试图表示的对象,在这种情况下是一篇新闻文章。

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;
}

请注意,此示例仅跟踪上一篇热门文章,因为您的问题并不表明需要更多。如果您确实需要维护热门文章的完整历史记录,您将需要一个文章列表,并在每次加载时简单地将最新的热门故事推送到它上面。

于 2013-09-04T22:17:27.780 回答