0

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;

                }
  }
4

3 に答える 3

2

別の問題は、あなたが提供したコードがノードの最上位レベルのみを見ていることだと思います。一致するノードが見つかるまでノードの子ノードを再帰的に通過するメソッドを作成する必要があります。このようなもの:

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;
}
于 2012-09-27T18:05:02.873 に答える
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;

                }
  }
于 2012-11-06T19:46:58.070 に答える
1

テキスト変更イベントに登録する必要があります: 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-06-18T13:37:56.640 に答える