C#/ WinForm - TreeView节点:添加到变量并进行比较

时间:2013-09-04 21:28:37

标签: c# winforms treeview nodes

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

1)应用程序启动

2)按下Button1:

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

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

3)按下Button1:

- 使用新文章标题填充TreeView1

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

- 比较变量1和2,如果它们不同则显示消息框。如果他们是相同的什么都不做。

4)按下Button1:

- 使用新文章标题填充TreeView1

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

- 比较变量2和3,如果它们不同则显示消息框。如果他们是相同的什么都不做。

依此类推......

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

所以我的问题是:每次按下button1时,如何将'First Node'存储到另一个变量?

先谢谢你们!

2 个答案:

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

请注意,此示例仅跟踪前一篇文章,因为您的问题并不表示需要更多。如果您确实需要保留热门文章的完整历史记录,那么您需要有一个文章列表,并且每次加载时都会将最新的热门故事推送到其中。