Form1:有个treeview1,Form2:有button1,textbox1,
现在实现button1控制treeview1添加一个节点,节点内容为textbox1.text我看了一些介绍是用控件异步:
代码如下:
2、Form2
public delegate void  AddNodeDelegate(string strNode);
public partial class Form2 : Form
{
        public AddNodeDelegate addNodeDelegate;
        public Form2()
        {
            InitializeComponent();
            addNodeDelegate = new AddNodeDelegate(AddNode);
        }        private void AddNode(string str)
        {
            treeView1.Nodes.Add(str);
    }
}
3、Form1public partial class Form1 : Form
{
        private Form2 form2;
        public Form1()
        {
            InitializeComponent();
        }        
        private void button1_Click(object sender, EventArgs e)
        {
            form2 = new Form2();
            form2.Show();
        }        private void button2_Click(object sender, EventArgs e)
        {
            if (form2 == null) //如果Form2没打开就不做什么。
                return;
            form2.addNodeDelegate("xyz");
        }
}可是不管用,请帮忙给出个新的代码,谢谢了

解决方案 »

  1.   

    这样可以,是不是button2_Click的事件没绑定。但为何要这样写,使用委托的目的是什么。
    private void AddNode(string str)写成public,就可以 form2.AddNode("")treeView1的Modifiers属性设为public,就可以 form2.treeView1.Nodes.Add("");
      

  2.   

    看来楼主对委托的概念还是没有很清晰
    委托相当于一个消息我看楼主的代码是希望 在form2里面点了一个button然后更新form1里面的treeview那么就应该在form1里面启动form2引用,然后注册form2的委托,最后在form2里面发送消息
    form1接到消息后更新成员treeview代码是拿记事本改的 你直接改一下Form1public partial class Form1 : Form
    {
            private Form2 form2;
            public Form1()
            {
                InitializeComponent();
                }        
    //接到返回的信息后将form2提交的text作为节点加入
    private void addNode(string sNode)
    {
    treeView1.Nodes.Add(sNode);
    }
    //启动应该是在from1里面起的
        private void button1_Click(object sender, EventArgs e)
            {
                form2 = new Form2();
      //注册from2的委托
    form2.addNodeDelegate+=new AddNodeDelegate(addNoe);
                form2.Show();
            }
    }、Form2
    public delegate void  AddNodeDelegate(string strNode);
    public partial class Form2 : Form
    {
            public AddNodeDelegate addNodeDelegate ;
            public Form2()
            {
                InitializeComponent();
            }
    //这里当按钮点下时只需要触发就可以了    private void button2_Click(object sender, EventArgs e)
            {
    string sNode=text1.text;
    addNodeDelegate(sNode);
            }

    }
      

  3.   

    Form1、Form2到底什么关系?如果大方向上被搂主误导,楼主也不可能得到正确的结果。
      

  4.   

    我想实现的是在form2里面点了一个button然后在form1的treeview添加一个节点。。就是这样了。。
      

  5.   

    最简单的办法  form1里面定义一个全局方法public void SetTree()
    {
    treenode node=new node();
    node.Text="111";
    ...
      treeview.nodes.add(node);
    }
    form2里面 button_click事件里面调 form1.SetTree()就可以了。
      

  6.   

    访问引用,
    http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
    http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx#sec5
      

  7.   

    谢谢各位的关注,尤其是:Kevins_Leader() 。谢谢了。问题现在解决了。