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 时,如何将"第一个节点"存储到不同的变量中?
提前感谢伙计们!
我建议使用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
}