【问题标题】:C#:Search from treeviewC#:从树视图中搜索
【发布时间】:2012-06-18 13:33:52
【问题描述】:

我从 XML 文件中加载了一个树视图数据。当用户在文本框中输入内容时,我想执行搜索。这是正确的做法吗??我只想过滤数据。请给我举个例子。

下面的代码不起作用。

 textBox1.Enter += new EventHandler(txtSearch_TextChanged);

 private void txtSearch_TextChanged(object sender, EventArgs e)
        {

            foreach (TreeNode node in this.treeView1.Nodes)
            {

                if (node.Text.ToUpper().Contains(this.textBox1.Text.ToUpper()))
                {

                    treeView1.SelectedNode = node;

                    break;

                }
  }

【问题讨论】:

  • 代码的哪一部分不工作?尝试放置一些断点,看看它如何处理不同的输入
  • @Ozgur Dogus:当我在文本框中输入内容时,树视图中没有发生搜索
  • 所以 textchanged 事件没有触发?
  • 首先打开设计视图并双击文本框。这应该会引导您进入您编写的 textchanged 事件。在 txtSearch_TextChanged 事件的开头放置一个断点并检查您的代码是否在运行时进入断点
  • @Ozgur Dogus:更改它并运行测试,它确实执行了代码,但当我在文本框中键入时仍然没有搜索。

标签: c# winforms textbox treeview


【解决方案1】:

我认为另一个问题可能是您提供的代码仅查看顶级节点。您将需要创建一个方法,该方法将递归地遍历节点的子节点,直到找到匹配项。像这样的:

private TreeNode FindNode(TreeNode node, string searchText)
{
  TreeNode result = null;

  if (node.Text == searchText)
  {
    result = node;
  }
  else
  {
    foreach(TreeNode child in node.Nodes)
    {
       result = FindNode(child, searchText);
       if (result != null)
       {
         break;
       }
    }  
  }
  return result;
}

【讨论】:

    【解决方案2】:
    textBox1.Enter += new EventHandler(txtSearch_TextChanged);
    
     private void txtSearch_TextChanged(object sender, EventArgs e)
            {
    
                foreach (TreeNode node in this.treeView1.Nodes)
                {
    
                    if (node.Text.ToUpper().Contains(this.textBox1.Text.ToUpper()))
                    {
                        treeView1.Select(); // First give the focus to the treeview control,
                        //doing this, the control is able to show the selectednode.
                        treeView1.SelectedNode = node;
    
                        break;
    
                    }
      }
    

    【讨论】:

      【解决方案3】:

      您需要注册文本更改事件:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.textchanged.aspx

      并用于查找特定节点:

      treeView1.Nodes.Find()
      

      模式详情在这里:http://msdn.microsoft.com/en-us/library/system.windows.forms.treenodecollection.find

      【讨论】:

        猜你喜欢
        • 2012-07-16
        • 1970-01-01
        • 2013-05-26
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 2020-10-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多