TreeList定位焦点节点

在Winform界面中,有的用到了TreeList控件。并且有一些功能需要用户在一个文本框中输入某些关键字,点击一个按钮能够自动去一个一个的匹配,并定位到拥有关键字的树节点。

类似于:

 为达到该功能,我写了一个公共方法方便系统中多处使用。

/// <summary>
/// 通过字符串设置焦点节点
/// </summary>
/// <param name="tr">树</param>
/// <param name="displayText">显示值</param>
public void SetFocusedNodeByDisplayText(TreeList tr, string displayText)
{
    if (tr.Nodes.Count == 0) return;
    List<TreeListNode> lstNode = tr.GetNodeList();  //获取树的所有节点
    int i = lstNode.IndexOf(tr.FocusedNode);        //焦点节点所在的位置
    int beginIndex = i + 1;                         //开始搜索匹配的位置            
    int waitIndex = lstNode.Count - 1 - i;          //开始位置后面需要匹配的节点位数
    bool isFind = false;                            //是否找到需要的节点
    if (beginIndex == lstNode.Count - 1)            //如果焦点节点是树中的最后一个节点,则从0开始匹配
    {
        beginIndex = 0;
    }
    while (beginIndex < lstNode.Count)              //从焦点节点到最后一个节点间进行匹配
    {
        if (lstNode[beginIndex].GetDisplayText(tr.Columns[0].FieldName).Contains(displayText))
        {
            tr.FocusedNode = lstNode[beginIndex];
            lstNode[beginIndex].Expand();
            isFind = true;
            break;
        }
        beginIndex += 1;
    }
    if (isFind == false)//如果在焦点节点到最后一个节点中没有匹配到想要的结果,则匹配从0开始到焦点节点位置
    {
        //匹配开始位置之前的
        for (int j = 0; j < lstNode.Count - waitIndex; j++)
        {
            if (lstNode[j].GetDisplayText(tr.Columns[0].FieldName).Contains(displayText))
            {
                tr.FocusedNode = lstNode[j];
                lstNode[j].Expand();
                break;
            }
        }
    }
}
发布了36 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_35351282/article/details/85264781