这就是我将树节点和节点添加到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;
using System.Text.RegularExpressions;
namespace ScrollLabelTest
{
public partial class DisplayResponses : Form
{
private int count;
private List<string> nodesNames = new List<string>();
private List<TreeNode> CurrentNodeMatches = new List<TreeNode>();
public DisplayResponses()
{
InitializeComponent();
label11.Text = "0";
count = 0;
label9.Text = InputLanguage.CurrentInputLanguage.LayoutName;
InputLanguageChanged += DisplayResponses_InputLanguageChanged;
button4.Enabled = false;
addmore();
}
void DisplayResponses_InputLanguageChanged(object sender, InputLanguageChangedEventArgs e)
{
label9.Text = InputLanguage.CurrentInputLanguage.LayoutName;
}
public void addmore()
{
for (int i = 0; i < ListsExtractions.text1.Count; i++)
{
}
for (int i = 0; i < ListsExtractions.responsers.Count; i++)
{
if (ListsExtractions.responsers[i].Count == 0)
{
ListsExtractions.responsers.RemoveAt(i);
}
}
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]);
}
}
}
响应者是List&gt;
我在treeView1中看到的是:
现在我有另一个名单
for (int i = 0; i < ListsExtractions.text1.Count; i++)
{
}
它在addmore方法中 我想将text1中的每个项目与节点文本进行比较,如果它们相同,则在节点附近添加图标 该图标位于我的项目资源中。
例如在我添加的屏幕截图中,如果第一个节点在text1中相同/存在,则在右侧附近添加资源的图标。
修改
这就是我试图做的事情:
public void addmore()
{
for (int i = 0; i < ListsExtractions.responsers.Count; i++)
{
if (ListsExtractions.responsers[i].Count == 0)
{
ListsExtractions.responsers.RemoveAt(i);
}
}
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]);
}
}
//AddIcons(l_node);
}
AddIcons方法:
private void AddIcons(TreeNode l_node)
{
for (int i = 0; i < ListsExtractions.text1.Count; i++)
{
for (int x = 0; x < l_node.Nodes.Count; x++)
{
if (l_node.Nodes[x].Text == ListsExtractions.text1[i])
{
//l_node.ImageIndex = 0;
l_node.Nodes[i].ImageIndex = 0;
}
}
}
}
首先,我如何将l_node变量传递给AddIcons方法? 其次,我试图将l_node变量移动到表单的顶部,然后在AddIcons中,它从未进入比较中:
if (l_node.Nodes[x].Text == ListsExtractions.text1[i])
我检查了text1中的一些项目也存在于Nodes Text
中我在我想要做的之前添加了屏幕截图,例如,如果第一个顶级节点text ==到text1中的一个项目,则添加图标。 然后移动到下一个节点并将其与text1中的项目进行比较 等所有节点上只有主节点而不是子节点。
例如,如果第一个节点是:
+ - 你好世界
如果hello world在text1中,则将图标添加到节点hello world
text1中的项目格式如下:
In index 0 text: hello world
In index 1 empty: ""
In index 2 text: hello
In index 3 empty: ""
这就是text1构建的方式
修改
这就是我现在尝试的:
在form1构造函数中:
InitializeComponent();
il = new ImageList();
il.Images.Add(Properties.Resources.stock_lock);
treeView1.ImageList = il;
label11.Text = "0";
count = 0;
label9.Text = InputLanguage.CurrentInputLanguage.LayoutName;
InputLanguageChanged += DisplayResponses_InputLanguageChanged;
button4.Enabled = false;
addmore();
il是ImageList变量 和addmore方法:
public void addmore()
{
for (int i = 0; i < ListsExtractions.responsers.Count; i++)
{
if (ListsExtractions.responsers[i].Count == 0)
{
ListsExtractions.responsers.RemoveAt(i);
}
}
foreach (List<string> l_branch in ListsExtractions.responsers)
{
TreeNode l_node = treeView1.Nodes.Add(l_branch[l_branch.Count - 1]);
if (ListsExtractions.text1.Contains(l_node.Text)) l_node.ImageIndex = 0;
for (int l_count = 0; l_count < l_branch.Count - 1; l_count++)
{
TreeNode l_subnode = l_node.Nodes.Add(l_branch[l_count]);
if (ListsExtractions.text1.Contains(l_subnode.Text)) l_subnode.ImageIndex = 0;
}
}
}
但我得到的是每个节点都有他附近的图标,而不仅仅是那些按照文本/名称存在的文本/名称。 这就是我得到的:
答案 0 :(得分:0)
不太确定这是否是你想要的,但是如果你想在树的创建过程中进行装饰,你只需要在正确的时刻进行装饰,也就是说你需要参考新节点:
treeView1.ImageList = il;
treeView1.ImageIndex= 999;
treeView1.SelectedImageIndex= 999;
foreach (List<string> l_branch in ListsExtractions.responsers)
{
TreeNode l_node = treeView1.Nodes.Add(l_branch[l_branch.Count - 1]);
if (ListsExtractions.Contains (l_node.Text) ) l_node.ImageIndex = 0;
for (int l_count = 0; l_count < l_branch.Count - 1; l_count++)
{
TreeNode l_subnode = l_node.Nodes.Add(l_branch[l_count]);
if (ListsExtractions.Contains (l_subnode.Text) ) l_subnode.ImageIndex = 0;
}
}
我使用Contains
的{{1}}方法,并在创建新子节点时抓住新子节点的句柄。不需要List<T>
方法。
编辑:原始版本出现错误:如果通过设置一个ImageIndex激活ImageList,则需要遵循以下几条规则:所有节点都将显示第一个图像(索引0)该列表既是默认的SelectedImageIndex,也是默认的ImageIndex。因此,您必须 在列表中包含一个空白图像,全部透明或在索引位置0的树的BackGroundColor中。因此,您必须设置装饰节点以显示索引为1的图像,作为SelectedImageIndex和ImageIndex ..
.. 或您将默认索引(SelectedImageIndex和ImageIndex)设置为您在ImageIndex中不使用的数字。
请注意没有图像集的行中的间隙!您可以尝试通过创建填补空白的默认图像来修补它。:
&lt; ===这是一个适合我的。