如何从 C# 中的两个不同窗体在 TreeView 控件中添加节点

Posted

技术标签:

【中文标题】如何从 C# 中的两个不同窗体在 TreeView 控件中添加节点【英文标题】:How to add nodes in TreeView control from two different Forms in C# 【发布时间】:2015-05-12 10:36:04 【问题描述】:

我的程序:

表格(Form1)包含:

button1 控件 TreeView1 控件

表格(Form2)包含:

burron1 控制 label1 控件 label2 控件

类数组

公共静态ar2数组

我的目标是使用两种形式(Form1ar2 数组中的每个元素作为 TreeView1 控件的节点Form2)。棘手的是我只需要从 Form2 添加满足特定条件的元素。我不知道该怎么做。

我添加了 if 条件,假装下一个元素是特殊的,必须从 Form2 中添加。

                if (element == "3")
            
                Form2 frm2 = new Form2(counter);
                frm2.Show();
                break; 
            

所以当元素等于 3 时调用 Form2 并仅从 Form2 添加下一个元素。

Form2 上,我需要单击 button1 并添加 仅此特殊元素(在本例中为元素 4),然后必须自动添加其余元素来自 Form1 中的 foreach 循环

Form1代码:

public partial class Form1 : Form

    int counter = 0;
    public Form1()
    
        InitializeComponent();
    

    private void Form1_Load(object sender, EventArgs e)
    

    

    private void button1_Click(object sender, EventArgs e)
    
        foreach (string element in ClassArray.ar2)
        
            treeView1.Nodes.Add(element);
            counter++;

            if (element == "3")
            
                Form2 frm2 = new Form2(counter);
                frm2.Show();
                break; 
            
        
    

类数组代码:

    class ClassArray

    public static string[] ar2 = new string[8]  "1", "2", "3", "4", "5", "6", "7", "8" ;


Form2代码:

public partial class Form2 : Form


    public Form2(int counter)
    
        InitializeComponent();
        label1.Text = "Elements added from Form1 = "+counter.ToString();
    

    private void button1_Click(object sender, EventArgs e)
    
        //Add the special element as a note
    

单击以将特殊元素添加为 TreeView1 中的节点。

然后 foreach 循环应该继续直到满足下一个条件,或者如果没有条件,它将继续到最后添加来自 ar2 的所有元素作为节点。

任何帮助将不胜感激。

【问题讨论】:

很难理解你的问题。你能试着解释清楚一点吗? 我正在添加从 Form1 到元素 3 的节点。然后我需要从 Form2 添加下一个元素,然后 foreach 循环继续从它停止的位置自动添加节点。 frm2.Show();休息;将其更改为 frm2.ShowDialog();继续; 谢谢帕维尔。这解决了问题 【参考方案1】:

在Form1中创建公共方法,这样可以从外部添加TreeView节点。

    public void AddElement(int index)
    
        string element = ClassArray.ar2[index];
        treeView1.Nodes.Add(element);
        counter++;
    

重做button1_Click 代码以使用AddElement 方法。还将foreach 循环替换为for。这样就可以跳过一个元素,您将从Form2 添加。

    private void button1_Click(object sender, EventArgs e)
    
        for (int i = 0; i < ClassArray.ar2.Length; i++)
        
            AddElement(i);

            if (ClassArray.ar2[i] == "3")
            
                Form2 frm2 = new Form2(counter);
                // ShowDialog will stop code execution until dialog is closed
                frm2.ShowDialog(this); // "this" - will be a Dialog Owner; it will come in handy in Form2
                i++; // skip "4"
            
        
    

现在在Form2 中获取Form1 实例并调用先前创建的AddElement 以将另一个节点添加到TreeView。

    private void button1_Click(object sender, EventArgs e)
    
        //Add the rest of the elemnts as notes
        Form1 form = Owner as Form1;
        form.AddElement(currentElementIndex);
    

currentElementIndex 只是一个类级别的变量,它包含一个counter 值。

    int currentElementIndex = 0;

    public Form2(int counter)
    
        ...
        currentElementIndex = counter;
    

【讨论】:

非常感谢。 ShowDialog() 解决了这个问题。谢谢你:)

以上是关于如何从 C# 中的两个不同窗体在 TreeView 控件中添加节点的主要内容,如果未能解决你的问题,请参考以下文章

在 C# windows 窗体中的树视图中面临问题,详细信息如下:

C# winform 用户权限,通过点击checkbox来屏蔽treeview点击功能

C# Winform如何实现单击treeview子节点“设置员工信息” 打开窗体Form1

C#中按钮点击后,treeview控件怎么选中指定节点?

C# winform treeview 节点展开状态的图标设置

C# winform treeview 节点展开状态的图标设置