侧边栏壁纸
博主头像
陌上花 博主等级

回首万事皆休

  • 累计撰写 69 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Dev Treelist基本使用

种向日葵的人
2025-03-11 / 0 评论 / 0 点赞 / 19 阅读 / 0 字

Why

  1. 最近在使用DevTreelist的时候,发现了一个问题,就是在我设计了相关样式AppearanceSelectedRowForeColor,然后我使用代码设置当前这个树的选择集的时候,字体颜色并不会变化,我一开始以为是页面的背景色的问题,接着还以为是树的数据源绑定的问题。后来才发现这个的主要问题是我当前的鼠标焦点不在这个树上,导致了样式的冲突,以下仅作记录。

How

  1. 工具箱拖动一个Treelist控件并设置相关的样式。注意这个时候一定要设置HideSelectionRow,只有设置这个,在当前树失去焦点的时候显示的样式。
    treelist_apperance.png
  2. 添加一个简单的列并设置绑定字段:
    treelist_column.png
  3. 代码部分,实现绑定:
private List<TreeData> treeDatas = new List<TreeData>();
public TreeListForm()
{
    InitializeComponent();
}

private void TreeListForm_Load(object sender, EventArgs e)
{
    for (int i = 0; i < 10; i++)
    {
        treeDatas.Add(new TreeData() { ID = i.ToString(), Name = "Node " + i });
    }
    this.treeList1.DataSource = treeDatas;
    this.treeList1.RefreshDataSource();

    var nodes = this.treeList1.GetNodeList();

    this.treeList1.Selection.SelectNodes(nodes);
}

private void treeList1_SelectionChanged(object sender, EventArgs e)
{
    //检验当前选中的节点是否跟已有的集合是同一种类型
    if (this.treeList1.Selection.Count < 1)
    {
        return;
    }
    var lastNode = this.treeList1.Selection.LastOrDefault();
    if (lastNode == null)
    {
        return;
    }
    var firstNode = this.treeList1.Selection.FirstOrDefault();
    var firstData = this.treeDatas[firstNode.Id];
    var rmNodes = new List<TreeListNode>();
    for (int i = 1; i < this.treeList1.Selection.Count; i++)
    {
        var curNode = this.treeList1.Selection[i];
        var curData = this.treeDatas[curNode.Id];

    }
    this.treeList1.Selection.UnselectNodes(rmNodes);
    this.treeList1.FocusedNode = this.treeList1.Selection.LastOrDefault();
}
//绑定的数据类
public class TreeData
{
    public string ID { get; set; }
    public string ParentID { get; set; }
    public string Name { get; set; }
}

Tips

  1. 注意失去焦点的时候应该设置HideSelectionRow
0
博主关闭了所有页面的评论