C#/WinForm - TreeView 节点 : Add to variable and compare

标签 c# winforms treeview nodes

<分区>

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

1) 应用启动

2) Button1 被按下:

-用新闻文章标题填充 TreeView1

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

3) Button1 被按下:

-用新文章标题填充 TreeView1

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

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

4) Button1 被按下:

-用新文章标题填充 TreeView1

-将第一个节点添加到变量 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;
}

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

关于C#/WinForm - TreeView 节点 : Add to variable and compare,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18624106/

相关文章:

c# - 如何通过将 dll 导入引用来在 C#.net for winforms 的工具箱中添加用户控件?

wpf - Silverlight TreeView 。无法绑定(bind) "IsExpanded"属性

java - 如何通过代码初始化JavaFX fxml文件中定义的树形控件

c# - 将两步 LINQ 查询转换为单个 LET 查询?

c# - WinForms 单元测试

c# - 具有异步表单工厂的简单注入(inject)器

c# - 从 UserControl 访问类方法(XAML、C#、TreeView)

c# - 我如何获得 WSDL/描述以便我可以在另一个项目中添加 Web 引用?

c# - EF 代码优先 : Where can I find the SavingChanges Event?

c# - 在 .NET 中如何最好地使用 XPath 处理非常大的 XML 文件?