我有一个带有treeView1和textBox1的新表单。
我希望当我在textBox1中输入一个单词时,如果它与任何节点中的任何项目中的单词匹配,则会突出显示该单词。
例如,如果我在textBox1中键入hello,它将找到所有存在的地方。
但如果我只键入h或者他不应该突出显示单词hello
也许可以为textBox1添加Enter键或点击事件以确认搜索时间。
现在我正在使用textBox1_TextChanged事件,但我不确定这是不是一个好主意。
一般情况下,我想在treeView中搜索所有列表项中的单词。
现在,当我在textBox1中键入一个字母/字符时,它会跳转到treeView1并折叠我不想要的地方。不按我的意愿工作。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ScrollLabelTest
{
public partial class DisplayResponses : Form
{
TreeNode[] treeNodes;
private List<string> nodesNames = new List<string>();
private List<TreeNode> CurrentNodeMatches = new List<TreeNode>();
private int LastNodeIndex = 0;
private string LastSearchText;
public DisplayResponses()
{
InitializeComponent();
addmore();
}
public void addmore()
{
foreach (List<string> l_branch in ListsExtractions.responsers)
{
TreeNode l_node = treeView1.Nodes.Add(l_branch[l_branch.Count - 1]);
for (int l_count = 0; l_count < l_branch.Count - 1; l_count++)
{
l_node.Nodes.Add(l_branch[l_count]);
}
}
}
private void DisplayResponses_Load(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
foreach (TreeNode tn in treeView1.Nodes)
{
/*if (textBox1.Text == tn.Text)
{
MessageBox.Show(tn.Text);
}*/
int positionOfDream = tn.Text.IndexOf(textBox1.Text);
if (positionOfDream != -1)
{
string name = tn.Text.Substring(positionOfDream, textBox1.Text.Length);
if (textBox1.Text == tn.Text)
{
MessageBox.Show(tn.Text);
}
}
}
}
}
}
}
在这部分:
if (textBox1.Text == tn.Text)
{
MessageBox.Show(tn.Text);
}
当我键入节点的完整名称时,它正在显示节点的名称。 现在在这一部分:
int positionOfDream = tn.Text.IndexOf(textBox1.Text);
if (positionOfDream != -1)
{
string name = tn.Text.Substring(positionOfDream, textBox1.Text.Length);
if (textBox1.Text == tn.Text)
{
MessageBox.Show(tn.Text);
}
}
我希望如果我键入完整的节点名称,或者如果我键入节点名称的一部分,它将显示它或具有此部分名称的任何其他节点。 例如,如果节点名称是:Hello world
如果我键入Hello,它将显示Hello world以及其他具有Hello内容的节点名称 但是,如果我只键入H,请不要显示名称中带有H的所有节点。
这部分工作后我想添加另一部分当我在textBox1中键入任何字符串而不是一个字母而不是一个字符串例如:Hello 因此,它将搜索所有节点,但不搜索节点的名称,但在每个节点树内搜索。 例如,我有一个节点名称:Hello World 如果我点击&#39; +&#39;在它附近它将崩溃并向我显示70项/子节点。 我想在这个70项/子节点上搜索我在textBox1中键入的字符串。
字符串/单词应该来自三个字母并且打开。如果我键入少于三个字母,则不要在70个项目/子节点中搜索,而是继续搜索上面的节点名称。
答案 0 :(得分:1)
以下代码将搜索所有节点以进行完全匹配,并突出显示背景为红色:
private void textBox1_TextChanged(object sender, EventArgs e)
{
foreach (TreeNode tn in treeView1.Nodes)
{
Call(tn);
}
}
private void Call(TreeNode treeNode)
{
if (treeNode.Text == textBox1.Text)
{
treeNode.BackColor = Color.Red;
}
else
{
treeNode.BackColor = Color.White;
}
foreach (TreeNode tn in treeNode.Nodes)
{
Call(tn);
}
}
答案 1 :(得分:0)
部分答案。
&#34;一个字符串/单词应该来自三个字母并打开。&#34; 只有在键入3个字母或更多字母后才能运行
if (textBox1.Text != "")
到
if (textBox1.TextLength >= 3)
{
//search child items only
}
else
{
//search items only
}