C# 从另一个类(或更好的类)填充TreeView#

C# 从另一个类(或更好的类)填充TreeView#,c#,winforms,treeview,C#,Winforms,Treeview,我正在尝试为我最喜欢的游戏之一制作一个关卡阅读器应用程序,简单地说,这就是我目前试图实现的目标: 级别文件的前8个字节: 0100000001000000 它表示网格版本=1,顶点版本=1 我制作了一个GUI,其中我有一个树视图,在树中它有头,在头中它有顶点和网格版本。我想用这些数据填充它们 现在,我的第一个问题出现了:我想在它自己的类(例如HeaderData、MaterialData)中完成所有阅读,只是为了让代码更干净。 因为我在另一个类中执行此操作,我不知道如何从所述类访问我的tree

我正在尝试为我最喜欢的游戏之一制作一个关卡阅读器应用程序,简单地说,这就是我目前试图实现的目标:

级别文件的前8个字节:

0100000001000000
它表示网格版本=1,顶点版本=1

我制作了一个GUI,其中我有一个树视图,在树中它有头,在头中它有顶点和网格版本。我想用这些数据填充它们

现在,我的第一个问题出现了:
我想在它自己的类(例如HeaderData、MaterialData)中完成所有阅读,只是为了让代码更干净。 因为我在另一个类中执行此操作,
我不知道如何从所述类访问我的treeview(如果我在Form类中,我可以只执行treeview.1,但我不知道如何从另一个类访问它。

注意:我尝试了Levelreader.Form1.treeview,但它不存在)

这是命名空间LevelReader中类Form1中的方法,该方法读取文件,然后实例化类头()。然后我调用HeaderData,在该类中我得到网格和顶点版本

namespace SceneStuff
{
    public class Header
    {

        public void HeaderData(byte[] hex)
        {
            //First 4 Bytes = Mesh Version
            //Second 4 Bytes = Vertex Version
            byte[] meshVersion = hex.Take(4).ToArray();
            byte[] vertexVersion = hex.Skip(4).Take(4).ToArray();

        }

    }
}
在这个方法中,我想使用这些数据来填充我的树视图。比如说,我在级别中更改了一些信息,比如将mesh版本更改为2,我希望,当我按“编译级别”(在我的应用程序GUI中)从树状视图中读取时,我认为这样最好。不过,如果你有什么建议,请说出来,因为我是c#的新手!

总之,我有两个问题:
1) 如何从另一个命名空间/类访问我的treeview?
2) 你对改进我的代码有什么建议吗?(我计划如何编制我的水平?)

谢谢

另外,我为这堵文字墙道歉!>_三种解决方案:
  • 您可以将
    Form1.Designer.cs
    中树状视图的可见性更改为
    public
    internal

  • 或者您可以在
    HeaderData()函数中构建TreeView节点并返回它们

  • 或者如@said所述,您可以通过引用
    HeaderData()
    函数传递TreeView:

  • 示例:

    public void HeaderData(byte[] hex, ref TreeView treeview)
    {
        //First 4 Bytes = Mesh Version
        //Second 4 Bytes = Vertex Version
        byte[] meshVersion = hex.Take(4).ToArray();
        byte[] vertexVersion = hex.Skip(4).Take(4).ToArray();
        
        //Example: Do something with the Mesh Version Node
        treeView1.Nodes[1].Nodes[0].Nodes[0].Text = "Lorem ipsum";
    }
    
    调用函数时,通过引用传递树状视图(在
    按钮内单击
    函数)

    三种解决方案:
  • 您可以将
    Form1.Designer.cs
    中树状视图的可见性更改为
    public
    internal

  • 或者您可以在
    HeaderData()函数中构建TreeView节点并返回它们

  • 或者如@said所述,您可以通过引用
    HeaderData()
    函数传递TreeView:

  • 示例:

    public void HeaderData(byte[] hex, ref TreeView treeview)
    {
        //First 4 Bytes = Mesh Version
        //Second 4 Bytes = Vertex Version
        byte[] meshVersion = hex.Take(4).ToArray();
        byte[] vertexVersion = hex.Skip(4).Take(4).ToArray();
        
        //Example: Do something with the Mesh Version Node
        treeView1.Nodes[1].Nodes[0].Nodes[0].Text = "Lorem ipsum";
    }
    
    调用函数时,通过引用传递树状视图(在
    按钮内单击
    函数)


    @Saeid87嗯,我是c#的新手,所以我认为引用它的方法是“Levelreader.Form1.treeView1.dostuff”,在Form1类“treeView1.dostuff”中。但在课堂之外,它说它不存在。你能澄清一下吗?网格版本的节点是
    treeView1.Nodes[1]。Nodes[0]。Nodes[0]
    @Saeid87好吧,我是c#新手,所以我认为引用它的方式是“Levelreader.Form1.treeView1.dostuff”,在Form1类“treeView1.dostuff”中。但在课堂之外,它说它不存在。你能澄清一下吗?网格版本节点是
    treeView1.Nodes[1]。Nodes[0]。Nodes[0]
    谢谢,它可以工作。我试图找到一些代码,允许预先存在的节点的填充;即,已在设计器视图中创建的节点。我发现的所有教程都需要在您使用的方法中创建一个节点,这不是我想要做的。因此,我似乎找不到填充预先存在的节点的方法。如果可能,我会更新我的问题,如果你愿意,你能告诉我如何填充节点吗?谢谢,谢谢,很有效。我试图找到一些代码,允许预先存在的节点的填充;即,已在设计器视图中创建的节点。我发现的所有教程都需要在您使用的方法中创建一个节点,这不是我想要做的。因此,我似乎找不到填充预先存在的节点的方法。如果可能,我会更新我的问题,如果你愿意,你能告诉我如何填充节点吗?谢谢
            treeNode2.Name = "meshVersion";
            treeNode2.Text = "Mesh Version";
    
    public void HeaderData(byte[] hex, ref TreeView treeview)
    {
        //First 4 Bytes = Mesh Version
        //Second 4 Bytes = Vertex Version
        byte[] meshVersion = hex.Take(4).ToArray();
        byte[] vertexVersion = hex.Skip(4).Take(4).ToArray();
        
        //Example: Do something with the Mesh Version Node
        treeView1.Nodes[1].Nodes[0].Nodes[0].Text = "Lorem ipsum";
    }
    
    temp.HeaderData(hex, ref treeView1)