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

本文关键字:变量 比较 添加 WinForm TreeView Nodes | 更新日期: 2023-09-27 18:30:15

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

1) 应用启动

2) 按下按钮 1:

- 用新闻文章标题填充树视图 1

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

3) 按下按钮 1:

- 使用新文章标题填充树视图 1

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

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

4) 按下按钮 1:

- 使用新文章标题填充树视图 1

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

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

等等等等....

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

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

提前感谢伙计们!

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

我建议使用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;
}

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

在清除现有节点之前。将第一个节点推送到列表中,如下所示。

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
}