从列表中填充树视图

时间:2013-05-13 14:01:09

标签: c# winforms treeview

目前,我在winform中设置了硬编码树视图,其中包含以下代码:

        private void Form1_Load_1(object sender, EventArgs e)
    {
        TreeNode _leftCameraNode = new TreeNode("LeftCamera");
        TreeNode _rightCameraNode = new TreeNode("RightCamera");
        TreeNode[] stereoCameraArray = new TreeNode[] { _leftCameraNode, _rightCameraNode };

        TreeNode _screenNode = new TreeNode("Screen");
        TreeNode _cameraNode = new TreeNode("Camera", stereoCameraArray);

        TreeNode[] headNodeArray = new TreeNode[] { _cameraNode };
        TreeNode _headNode = new TreeNode("HeadNode", headNodeArray);

        TreeNode[] centreNodeArray = new TreeNode[] { _screenNode, _headNode };
        TreeNode _centreNode = new TreeNode("CentreNode", centreNodeArray);

        // root node
        TreeNode[] inmoRootNodeArray = new TreeNode[] { _centreNode };
        TreeNode treeNode = new TreeNode("Main Node", inmoRootNodeArray);
        treeView1.Nodes.Add(treeNode);
    }

这很好用,但它的功能非常有限。我真正希望这样做的是从我设置的节点列表中填充,并填写我从表单上的一堆文本框中获取的信息。

例如,我创建了一个新的屏幕列表(我的节点类的子节点),如下所示:

    public  List<HV_Screen> _screenList = new List<HV_Screen>();

然后我用我的文本框中输入的数据填写我的列表,如下所示:

     if (_selectedNode > -1)
        {
            Node n = _nodeList[_nodeList.Count - 1];
            n.Name = _screenName;
        }

我一直在寻找网络和stackoverflow,但我找不到任何东西来帮助我动态创建我的树视图,所以我想知道是否有人能够指出我正确的方向和帮助我出去怎么做?

我想这样做的原因是,因为我说我的屏幕有3个不同的实例,我希望我的树视图显示这个,然后如果我将screen1中的名称更改为MYSCREEN,我希望我的树视图显示这个。但是,如果我单击screen2,树视图仍将显示默认名称。然后,当我点击屏幕1时,它的新名称MYSCREEN仍将显示在那里。

我希望这样做。

修改

以下评论是我当前GUI的屏幕截图: enter image description here

那里的树结构都是用上面的代码硬编码的。这不会从我的班级屏幕类中获取任何信息。

现在,我的HV_Screen类看起来如下:

 private string WIDTH;
    private string HEIGHT;

    public string Width
    {
        get { return WIDTH; }
        set { WIDTH = value; }
    }

    public string Height
    {
        get { return HEIGHT; }
        set { HEIGHT = value; }
    }

    public override List<XmlElement> GenerateXML(XmlDocument _xmlDoc)
    {

       List<XmlElement> elementList = new List<XmlElement>();

        XmlElement _screenName = _xmlDoc.CreateElement("ScreenName");
        _screenName.SetAttribute("Name", name.ToString());
        _screenName.InnerText = name.ToString();
        elementList.Add(_screenName);

        XmlElement _screenTag = _xmlDoc.CreateElement("ScreenTag");
        _screenTag.SetAttribute("Tag", tag.ToString());
        _screenTag.InnerText = tag.ToString();
        elementList.Add(_screenTag);

        XmlElement _localPosition = _xmlDoc.CreateElement("LocalPosition");
        _localPosition.SetAttribute("X", XPOS.ToString());
        _localPosition.SetAttribute("Y", YPOS.ToString());
        _localPosition.SetAttribute("Z", ZPOS.ToString());
        _localPosition.InnerText = WorldPos.ToString();
        elementList.Add(_localPosition);


        XmlElement _orientation = _xmlDoc.CreateElement("Orientation");
        _orientation.SetAttribute("Yaw", YAW.ToString());
        _orientation.SetAttribute("Pitch", PITCH.ToString());
        _orientation.SetAttribute("Roll", ROLL.ToString());
        _orientation.InnerText = Orientation.ToString();
        elementList.Add(_orientation);

        XmlElement _width = _xmlDoc.CreateElement("Width");
        _width.SetAttribute("Width", WIDTH.ToString());
        _width.InnerText = WIDTH.ToString();
        elementList.Add(_width);

        XmlElement _height = _xmlDoc.CreateElement("Height");
        _height.SetAttribute("Height", HEIGHT.ToString());
        _height.InnerText = HEIGHT.ToString();
        elementList.Add(_height);

        return elementList;
    }

没什么太重要的。这只是接收信息并将其写入xml文件。我计划为每个Node孩子做这个。所以,如果我有一个相机类,它将有自己的生成XML函数并从那里写出来。我的基类(节点)只有一堆getter和setter,用于命名,标记等。

通过此时设置代码的方式,我可以添加新节点。首先,我必须选择我要分支的根节点,然后填写与之关联的信息。因此,在该屏幕截图中,如果我选择主节点然后点击添加按钮,则示例名称现在将成为主节点的子节点。但是,如果我选择Sample和Name并更改它,则不会发生任何事情。

这种方式也被硬编码为仅与我的屏幕类相关。理论上,我可以简单地打开和关闭许多不同的文本框,但这将是非常糟糕的做法。而且我很确定它会对我的程序性能产生影响。

所以,我想要的是一个名称文本框,它将负责为每个需要名称的对象填写名称。然后,我想拿出我输入的名字并填写树视图。一旦我选择它,我希望我选择的节点用我为其放入的所有相关文本填写文本框。但是,如果我更改所选节点的名称,它还将更改树结构中的名称。

再次,抱歉,如果这令人困惑。我此刻很吵。

0 个答案:

没有答案