zoukankan      html  css  js  c++  java
  • C# TreeView 节点查找

    主窗体部分代码
    /// <summary>
    /// 遍历树节点,并将节点存入List<TreeNode>集合中
    /// </summary>
    /// <param name="node"></param>
    /// <param name="nodeList"></param>
    public void GetAllNodes(TreeNodeCollection nodeCollection, List<TreeNode> nodeList)
    {
    foreach (TreeNode itemNode in nodeCollection)
    {
    nodeList.Add(itemNode);
    GetAllNodes(itemNode.Nodes, nodeList);
    }
    }
    /// <summary>
    /// 查找
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnFolder_Click(object sender, EventArgs e)
    {
    if (this.OwnedForms.Length > 0)
    {
    this.OwnedForms[0].Close(); //如果查询窗体已打开,则关闭已打开的窗口
    }
    TreeViewQuery frm = new TreeViewQuery(this);
    frm.ShowInTaskbar = false;
    frm.Show(this);
    }

    查找窗体代码

    private FolderFrom parentFrm;
    private string lastFindString; //记录上一次查找的文本
    private int lastFindCount; //记录上一次查找的标记
    private List<TreeNode> nodeList = new List<TreeNode>(); //记录所有的树节点
    public TreeNode node = null; //记录查找到的节点
    private bool IsUp = false; //是否向上查找
    public TreeViewQuery ()
    {
    InitializeComponent();
    }
    public TreeViewQuery (FolderFrom frm)
    {
    InitializeComponent();
    parentFrm = frm;
    }
    #region Methods
    /// <summary>
    /// 模糊匹配(向下查找)
    /// </summary>
    /// <param name="inputText"></param>
    /// <returns></returns>
    private int FindNodePartDown(string inputText, int startCount)
    {
    nodeList.Clear();
    parentFrm.GetAllNodes(parentFrm.tvFolder.Nodes, nodeList);
    for (int i = startCount; i < nodeList.Count; i++)
    {
    if (nodeList[i].Text.Contains(inputText))
    {
    return i;
    }
    }

    return -1;
    }

    /// <summary>
    /// 模糊匹配(向上查找)
    /// </summary>
    /// <param name="inputText"></param>
    /// <returns></returns>
    private int FindNodePartUp(string inputText, int startCount)
    {
    nodeList.Clear();
    parentFrm.GetAllNodes(parentFrm.tvFolder.Nodes, nodeList);
    if (startCount == 0)
    {
    startCount = nodeList.Count - 1;
    }
    //for (int i = nodeList.Count - 1; i > startCount; i--)
    for (int i = startCount; i >= 0; i--)
    {
    if (nodeList[i].Text.Contains(inputText))
    {
    return i;
    }
    }

    return -2;
    }
    /// <summary>
    /// 全字匹配查找(向下查找)
    /// </summary>
    /// <param name="inputText">查找的内容</param>
    /// <param name="startCount">起始位置</param>
    /// <returns></returns>
    private int FindNodeAllDown(string inputText, int startCount)
    {
    nodeList.Clear();
    //List<TreeNode> nodeList = new List<TreeNode>();
    parentFrm.GetAllNodes(parentFrm.tvFolder.Nodes, nodeList);
    for (int i = startCount; i < nodeList.Count; i++)
    {
    if (nodeList[i].Text.CompareTo(inputText) == 0)
    {
    return i;
    }
    }
    return -1;
    }
    /// <summary>
    /// 全字匹配查找(向上查找)
    /// </summary>
    /// <param name="inputText">查找的内容</param>
    /// <param name="startCount">起始位置</param>
    /// <returns></returns>
    private int FindNodeAllUp(string inputText, int startCount)
    {
    nodeList.Clear();
    //List<TreeNode> nodeList = new List<TreeNode>();
    parentFrm.GetAllNodes(parentFrm.tvFolder.Nodes, nodeList);
    for (int i = nodeList.Count - 1; i > startCount; i--)
    {
    if (nodeList[i].Text.CompareTo(inputText) == 0)
    {
    return i;
    }
    }
    return -1;
    }
    #endregion
    #region Events
    /// <summary>
    /// 取消
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnClose_Click(object sender, EventArgs e)
    {
    this.Close();
    this.Dispose();
    }
    /// <summary>
    /// 窗体加载
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void TreeViewQuery_Load(object sender, EventArgs e)
    {
    this.Icon = new System.Drawing.Icon(AppDomain.CurrentDomain.BaseDirectory + @"Logo/Logo.ico");
    }

    /// <summary>
    /// 当文本框不为空时启用查找按钮
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void txtInputText_TextChanged(object sender, EventArgs e)
    {
    if (txtInputText.Text.Trim() == "")
    {
    btnQueryNext.Enabled = false;
    }
    else
    {
    btnQueryNext.Enabled = true;
    }
    }

    /// <summary>
    /// 查找下一个
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnQueryNext_Click(object sender, EventArgs e)
    {
    string inputText = txtInputText.Text.ToString(); //输入框的值
    if (checkWord.Checked == true) //判断是否全字匹配
    {
    if (rbtnUp.Checked == true)
    {
    if (inputText.CompareTo(lastFindString) != 0 || (!IsUp)) //判断是否与上一次的查询文本相同
    {
    lastFindCount = FindNodeAllUp(inputText, 0); //不同则重新查找
    lastFindString = inputText;
    }
    else
    {
    lastFindCount = FindNodeAllUp(inputText, lastFindCount - 1); //相同则从下一个节点开始查找
    lastFindString = inputText;
    }
    IsUp = true;
    }
    else
    {
    if (inputText.CompareTo(lastFindString) != 0 || (IsUp)) //判断是否与上一次的查询文本相同
    {
    lastFindCount = FindNodeAllDown(inputText, 0); //不同则重新查找
    lastFindString = inputText;
    }
    else
    {
    lastFindCount = FindNodeAllDown(inputText, lastFindCount + 1); //相同则从下一个节点开始查找
    lastFindString = inputText;
    }
    IsUp = false;
    }
    }
    else
    {
    if (rbtnUp.Checked == true)
    {
    if (inputText.CompareTo(lastFindString) != 0 || (!IsUp))
    {
    lastFindCount = FindNodePartUp(inputText, 0);
    lastFindString = inputText;
    }
    else
    {
    lastFindCount = FindNodePartUp(inputText, lastFindCount - 1);
    lastFindString = inputText;
    }
    IsUp = true;
    }
    else
    {
    if (inputText.CompareTo(lastFindString) != 0 || (IsUp))
    {
    lastFindCount = FindNodePartDown(inputText, 0);
    lastFindString = inputText;
    }
    else
    {
    lastFindCount = FindNodePartDown(inputText, lastFindCount + 1);
    lastFindString = inputText;
    }
    IsUp = false;
    }
    }
    if (lastFindCount == -1) //判断是否找到节点
    {
    MessageBox.Show( "查找到尾部,未找到指定的节点!");
    this.Focus();
    lastFindCount = 0;
    lastFindString = "";
    return;
    }
    else if (lastFindCount == -2) //判断是否找到节点
    {
    essageBox.Show("查找到顶部,未找到指定的节点!");
    this.Focus();
    lastFindCount = 0;
    lastFindString = "";
    return;
    }
    node = nodeList[lastFindCount];
    parentFrm.tvFolder.SelectedNode = node; //选中查找到的节点
    parentFrm.tvFolder.Focus();
    }

  • 相关阅读:
    luoguP2939 [USACO09FEB]改造路Revamping Trails
    出题
    数字游戏
    统一异常处理
    数据验证
    拦截器
    数据绑定和表单标签库
    类型转换和格式化
    Spring MVC入门
    4springboot:日志(下)
  • 原文地址:https://www.cnblogs.com/wwwlzp/p/13158255.html
Copyright © 2011-2022 走看看